Bài tập xử lý chuỗi trong java: tìm vị trí xuất hiện của một ký tự trong một xâu

Tìm hiểu đối tượng người sử dụng String trong JAVA

Trong bất kỳ một ngôn ngữ lập trình Việc giải pháp xử lý chuỗi ký kết tự là công việc trở ngại và mất quá nhiều thời hạn tốt nhất so với lập trình viên, mặc dù đấy là loại dữ liêụ thịnh hành độc nhất nhằm máy vi tính hoàn toàn có thể tiếp xúc qua lại con bạn. Trong JAVA giao diện dữ liệu chuỗi cam kết từ (String) được coi là một dạng dữ liệu đối tượng người tiêu dùng.

Bạn đang xem: Bài tập xử lý chuỗi trong java: tìm vị trí xuất hiện của một ký tự trong một xâu

Lớp String cùng lớp StringBuffer dùng làm cung cấp các làm việc trên bí quyết chuỗi cam kết từ. Lớp String hộ trợ những chuỗi hằng, trái lại lớp StringBuffer cung ứng những chuỗi hoàn toàn có thể sửa thay đổi và phát triển được. Những đối tượng người dùng String cô ứ đọng hơn những đối tượng người tiêu dùng StringBuffer, mà lại đối tượng người sử dụng StringBuffer lại linh động rộng.

Các hằng chuỗi, quy tắc tàng trữ giá trị chuỗi ký kết tự trong lớp String.

Các hằng chuỗi là phần đông chuỗi được khẳng định bởi cặp dấu "" nháy kxay ví dụ “this is a string” và “xyz”. Hằng chuỗi không giống với giá trị hằng của kiểu dáng nguyên ổn tbỏ. khi công tác biên dịch javac phát hiện 1 hằng chuỗi, nó đổi khác hằng này thành một hàm dựng. Sau đây là ví dụ

String str = "text";Tương đương với:

String str = new String("text");Bộ biên dịch auto cung ứng các hàm dựng String cho phép các bạn áp dụng những hằng chuỗi ở đầy đủ địa điểm cơ mà chúng ta có thể cần sử dụng các đối tượng của lớp String.

Tân oán tử + cùng lớp StringBuffer

Nếu như các đối tượng String là hằng, thì làm cho nạm như thế nào nối chúng bởi toán thù tử + cùng gán cho những đối tượng người dùng String vẫn tồn tại? Trong ví dụ sau đây, chương trình đã mang lại công dụng vào chuỗi “ab” được gán vào đối tượng s:

String s = "";s = s + "a" + "b";Làm rứa nào nhằm triển khai được vấn đề này trường hợp các chuỗi là hằng? Câu trả lời nằm tại bài toán trình biên dịch Java dùng các đối tượng người tiêu dùng StringBuffer để chấm dứt những làm việc chuỗi. Đoạn mã này biểu lộ một điều gì đấy tương tự như với mẫu nhưng trình biên dịch Java đã thực hiện:

String s = "";s = new StringBuffer("").append("a").append("b").toString();Một đối tượng người sử dụng mới của lớp StringBuffer được tạo ra cùng với đối số “”. Pmùi hương thức StringBuffer append() dùng làm thêm các chuỗi “a”, “b” vào đối tượng người sử dụng new, và tiếp đến đối tượng người dùng này được biến hóa thành một đối tượng người tiêu dùng String thông qua cách tiến hành toString(). Phương thức toString() tao một đối tượng mới của lớp String trước lúc nó được gán mang lại biến đổi s. Bằng cách này, phát triển thành s luôn luôn luôn luôn tđắm say chiếu mang đến một đối tượng String ko đổi.

Các hàm dựng String.

Lớp String hỗ trợ 7 hàm dựng (constructor) mang đến quá trình khởi hiện ra cùng khới chế tạo đối tượng người sử dụng String. Những hàm dựng này được cho phép chuỗi được tạo thành tự chuỗi không giống, hằng chuỗi, mảng cam kết từ bỏ, mảng byte và đối tượng người sử dụng StringBuffer. quý khách hàng buộc phải coi sóc qua trang API của lớp String nhằm rất gần gũi cùng với những hàm dựng này.

Các thủ tục truy vấn của lớp String

Theo như bộc lộ của JAVA tại phía trên, vẻ bên ngoài dữ liệu này được JAVA ưu ái cung ứng không hề ít nằm trong tính với cách làm thao tác. Thực vậy lớp String cung ứng một tập vừa lòng những cách làm mạnh mẽ để gia công bài toán cùng với đối tượng người tiêu dùng String. Nhựng phương thức này chop phnghiền các bạn truy vấn những ký từ bỏ riêng biệt rẽ cùng đều chuỗi con; bình chọn và đối chiếu các chuỗi; sao chép, nối những phần của một chuỗi; thay đổi và chế tạo ra chuỗi; cũng tương tự triển khai những thao tác làm việc bổ ích khác bên trên chuỗi.

Các thủ tục quan lại trong nhật là:

Pmùi hương thức length(): trả vể một cực hiếm số nguyên ổn chỉ chiều dài của chuỗi.Phương thức charAt(): được cho phép truy vấn các ký kết từ bỏ riêng rẽ rẽ vào một chuỗi.Pmùi hương thức subString(): được cho phép truy vấn những chuỗi con của một chuỗi.Pmùi hương thức valueOf(): cho phép biến đổi những kiểu dữ liệu ngulặng thủy thành những chuỗi.

Ngoài đa số cách thức này, lớp Object còn hỗ trợ cách thức toString() nhằm biến hóa các đối tượng người sử dụng khác thành đều đối tượng của lớp String. Phương thức này thường hay bị những lớp nhỏ lấn lướt để hỗ trợ một quá trình đổi khác đối tượng thành chuỗi phù hợp hơn.

Các cách thức rước ký kết từ bỏ với chuỗi con

Vài phương thức String chất nhận được các bạn truy cập các cam kết từ bỏ riêng rẽ rẽ và những chuỗi nhỏ của một chuỗi. Những thủ tục này có charAt(), getBytes(), getChars(), indexOf(), với subString(). Mỗi khi bạn đề nghị triển khai các làm việc trên chuỗi, cẩn thận soát sổ làm hồ sơ API nhằm chắc rằng bạ không sơ xuất một cách thức String dễ tiến hành với được quan niệm trước.

Các phương thức đánh giá với so sánh chuỗi.

Vài cách thức của lớp String có thể chấp nhận được các bạn so sánh chuỗi, chuỗi bé, mảng ký từ bỏ, mảng byte và những đối tượng người tiêu dùng không giống với cùng một chuỗi đã mang lại. Một số phương thức này là compareTo(), endsWith(), equals(), equalsIgnoreCase(),  và starsWith().

Xem thêm: Penggunaan Would Like & Contohnya Dalam Kalimat, Cara Penggunaan Would You Like

Các phương thức xào luộc, nối và rứa thế

Những cách làm sau đây hữu ích cho việc xào luộc, nối cùng thao tác làm việc các chuỗi: concat(). copyValueOf(), replace() cùng trim().

Quá trình tạo ra với biến hóa chuỗi

Có một số thủ tục cung ứng quá trình biến hóa chuỗi. Chúng là intern(), toCharArray(). toLowerCase(), toString(). toUpperCase(), với valueOf(). quý khách khám phá tính năng của các cách tiến hành này trong các ví dụ của API.

Lớp StringBuffer

Lớp StringBuffer là lực lượng đằng sau hậu ngôi trường cho các thao tác chuỗi phức tạp tuyệt nhất. Trình biên dịch auto khai báo với xử trí đối tượng người tiêu dùng của lớp này để bổ sung cập nhật những thao tác làm việc chuỗi thường thì.

Lớp StringBuffer cung ứng cha hàm dựng (constructor): một hàm dựng trống rỗng, một hàm dựng trống rỗng với chiều dài vùng đệm được xác minh thuở đầu, với một hàm dựng khởi sinh sản đối tượng người tiêu dùng StringBuffer tự đối tượng String. Nói phổ biến, các bạn sẽ trường đoản cú tìm kiếm thấy việc kiến thiết các đối tượng người sử dụng StringBuffer từ bỏ đông đảo đối tượng người sử dụng String, cùng hàm dựng sau cùng đã là hàm dựng bạn tiếp tục sử dụng độc nhất vô nhị.

Lớp StringBuffer hỗ trợ vài phiên bản của những cách làm append() để chuyển đổi cùng thêm các đối tượng người dùng khác cùng các kiểu dáng dữ liệu nguyên ổn tdiệt vào phần đông đối tượng người dùng StringBuffer. Nó cũng cung ứng một cỗ các cách tiến hành insert() nhằm cyếu cam kết trường đoản cú và giao diện dữ liệu nguyên thủy vào những đối tượng StringBuffer. Hình như lớp này còn hỗ trợ những thủ tục nhằm truy cập vùng đệm của đối tượng người sử dụng StringBuffer cùng các phương thơm thưc truy cập ký tự trong một chuỗi. Nên gọi những tài liệu API để có hướng chọn lựa và thực hiện những phương thức cơ mà lớp này cung cấp.

Thao tác cắt tách bóc chuỗi trong JAVA

Để giảm chuỗi vào java ta hoàn toàn có thể dùng 2 bí quyết thông dụng là thực hiện cách làm split bao gồm sẵn trong class String hoặc dùng đối tượng StringTokenizer để cách xử lý.

Dùng cách làm string.spilt(regex) nhằm giảm chuỗi cùng với cùng với ký kết từ định hình địa chỉ cắt theo cú pháp regex

String phone = "012-3456789";String<> output = phone.split("-");System.out.println(output<0>);System.out.println(output<1>);Kết quả trả về

0123456789Lưu ý: Khi thực hiện regex nhằm tra cứu địa điểm đề xuất cắt trong chuổi trường hợp ký từ regex này là những ký từ bỏ keyword đặc biệt quan trọng thì bọn họ đề xuất sử dụng ký kết trường đoản cú đánh dấu “\” trước ký trường đoản cú quan trọng, Trong ví dụ sau “.” là ký trường đoản cú giữ địa điểm phải cắt

import java.util.regex.Pattern;public class TestSplit public static void main(String<> args) String chạy thử = "abc.def.123"; String<> output = demo.split("\."); //alternative sầu //String<> output = thử nghiệm.split(Pattern.quote(".")); System.out.println(output<0>); System.out.println(output<1>); System.out.println(output<2>); Kết quả trả về

abcdef123Để bình chọn lô ghích coi chuỗi buộc phải cắt có thể cắt hay không ta sử dụng phương thức lấy con số bộ phận trong mảng hiệu quả trả về, giả dụ length lớn hơn 0 thì chuổi rất có thể cắt và ngược chở lại. Quý khách hàng có thể coi nội dung bài viết “thao tác giải pháp xử lý mảng” này để rõ hơn bí quyết cần sử dụng.

import java.util.regex.Pattern;public class TestSplit public static void main(String<> args) String test = "abc.def.123"; if(demo.contains(".")) String<> output = thử nghiệm.split("\."); if(output.length!=3) throw new IllegalArgumentException(thử nghiệm + " - invalid format!"); else System.out.println(output<0>); System.out.println(output<1>); System.out.println(output<2>); else throw new IllegalArgumentException(chạy thử + " - invalid format!"); Dùng đối tượng StringTokenizer để cắt chuỗi

Ngay từ phần lớn ngày đầu của phiên bạn dạng JAVA 1.0 fan ta chỉ bao gồm nhất một cách để cắt chuỗi là sử dụng đối tượng StringTokenizer, mãi mang lại sau này vào phiên phiên bản JAVA 1.4 phương thức String.split bắt đầu được Oracle cung ứng.

import java.util.StringTokenizer;public class TestSplit public static void main(String<> args) String thử nghiệm = "abc.def.123"; StringTokenizer token = new StringTokenizer(test, "."); while (token.hasMoreTokens()) System.out.println(token.nextToken()); Kết Quả Trả Về:

abcdef123Tuy rằng cả hai cách trên những hoàn toàn có thể dùng cùng hoạt động tuyệt vời cơ mà chúng ta chỉ nên dùng split để thao tác, StringTokenizer hiện tại nãy đã không còn được hỗ trợ với khuyến nghị dùng, đối tượng người dùng này còn được JAVA gìn giữ nhằm mục tiêu mục đích tương xứng cùng với những hệ thống cũ.

Một số biện pháp hòn đảo chuỗi trong JAVA.

Sau đó là 5 biện pháp hòn đảo ngược một chuỗi ký tự. Qua những ví dụ này các bạn sẽ nhận biết một vài điều thú vị giữa 2 lớp đối tượng người tiêu dùng String cùng StringBuider như:

Đối tượng tài liệu String ko chuyển đổi.(5 ví dụ sau biểu thị mang đến bài toán nói rằng lớp String chỉ cách xử lý chuỗi tĩnh)Lớp String trong Java không có cách tiến hành reverse (), tuy nhiên lớp StringBuilder đã làm được xây cất trong cách làm reverse ().Lớp StringBuilder không có cách thức charArray (), trong khi lớp String bao gồm cách làm toCharArray ().

Cùng thực hành 5 phương pháp giải pháp xử lý đảo ngược string dưới đây với tài liệu mẫu như sau:

Nhập: GeeksforGeeksĐầu ra: skeeGrofskeeGCách 1: dùng cách làm getBytes()

Tạo nhị mảng dữ liệu trợ thì hình dạng byte với kích cỡ ngay số cam kết từ trong chuỗi.Dùng cách thức getBytes() chuyển đổi chuổi string vào mảng trợ thời lần đầu tiên bên trên.Duyệt ngược mảng nhất thời trước tiên và lưu lại giá trị này vào mảng tam thứ hai.Chuyển mạng tạm bợ thứ 2 thành một chuổi new.

// Java program khổng lồ ReverseString using ByteArray.import java.lang.*;import java.io.*;import java.util.*; // Class of ReverseStringclass ReverseString{ public static void main(String<> args) { String input đầu vào = "GeeksforGeeks"; // getBytes() method to convert string // into lớn bytes<>. byte <> strAsByteArray = đầu vào.getBytes(); byte <> result = new byte ; // Store result in reverse order into lớn the // result byte<> for (int i = 0; i