So sánh chuỗi ký từ trong worpress năm 2024
Show 1. Khai báo chuỗi: c#string str ,str1,str2; // khai báo danh sách chuỗi str="hàm xử lý, xữ lý chuỗi c#"; //gán giá trị chuỗi str1="xử lý chuỗi 1"; str2="xử lý chuỗi 2"; 2. Lấy chiều dài chuỗi: str.Length 3. So sánh 2 chuỗi:String.Compare(str1, str2, true) So sánh hai chuỗi không phân biệt hoa thường, str1 bằng, nhỏ hơn, lớn hơn str2 VD: Kiểm tra xem 2 chuỗi có giống nhau hay không if (String.Compare(str1, str2, true) == 0) { }
else if (String.Compare(str1, str2, true) < 0)
{ }String.Compare(str1, str2, false) Giống như trên, nhưng phân biệt chữ hoa và chữ thường. 4. Kiểm tra sự tồn tại của chuỗi 1 (Str1) trong chuỗi 2 (Str2):Str1.Contains(Str2) 5. Tìm vị trí hiển thị của chuỗi: Str1.IndexOf("chuỗi") Hàm trả về vị trí xuất hiện đầu tiên của ký tự “chuỗi” trong Str1. Trả về -1 nếu trong Str1 không có ký tự “chuỗi”. 6. Tìm vị trí xuất hiện cuối cùng của chuỗi:Str1.LastIndexOf("chuỗi") Hàm trả về vị trí xuất hiện cuối cùng của ký tự “chuỗi” trong Str1. Trả về -1 nếu trong Str1 không có ký tự “chuỗi”. 7. Kiểm tra xem chuỗi 1 (Str1) có bắt bầu bằng ký tự trong chuỗi 2 (Str2) không:Str1.StartsWith(Str2) 8. Thay thế chuỗi:Str = Str.Replace(",",".") Thay thế dấu ‘,’ thành dấu ‘.’ trong chuỗi Str. str.Length 0 Thay thế chuỗi ‘xử lý’ thành chuỗi ”hàm chuỗi’ trong chuỗi Str. 9. Cắt chuỗi con:str.Length 1 Tạo chuỗi con từ chuỗi Str bắt đầu từ vị trí 2 đến hết. str.Length 2 Cắt chuỗi từ vị trí đầu tiên(vị trí 0) đến vị trí số 6, kết quả là ‘hàm xử’. 10. Tách chuỗi:str.Length 3 Vd: //tách trong chuỗi str trên khi gặp ký tự ‘,’ str.Length 4 //kết quả str.Length 5 Hoặc: //tách trong chuỗi str trên khi gặp ký tự ‘,’ str.Length 6 //kết quả str.Length 7 11. Chuyển chữ hoa sang chữ thường và ngược lại: str.Length 8 Cắt hết khoảng trắng ở đầu và cuối chuỗi str.Length 9 Cắt hết khoảng trắng ở đầu chuỗi String.Compare(str1, str2, true) 0 Cắt hết khoảng trắng ở cuối chuỗi 13. Xóa chuỗi: String.Compare(str1, str2, true) 1 Xóa chuỗi Str1 từ vị trí 1 đến hết. String.Compare(str1, str2, true) 2 Xóa 1 chuỗi con trong Str1 có chiều dài là 5. Từ vị trí 1 đến vị trí 5 Chúc các bạn thành công! Tham khảo Trong Java cũng như các ngôn ngữ hướng đối tượng khác thì đối tượng là tập hợp những dữ liệu có liên quan, cùng với một tập các phương thức. Những phương thức nafyhoajt động trên đối tượng kể trên, thực hiện tính toán và đôi lúc thay đổi dữ liệu trong đối tượng đó. String (chuỗi kí tự) là các đối tượng, bởi vậy bạn có thể hỏi “Có dữ liệu nào được chứa trong một đối tượng String?” và “Có những phương thức nào mà ta có thể kích hoạt được từ đối tượng String?” Những thành phần trong một đối tượng String là các chữ cái, hay tổng quát hơn, là những kí tự. Không phải mọi kí tự đều là chữ cái; còn những kí tự là chữ số, kí hiệu, và các thứ khác. Để đơn giản tôi sẽ gọi chúng đều là các chữ cái. Có nhiều phương thức khác nhau, nhưng trong sách này chỉ dùng một số ít. Các phương thức còn lại được chỉ dẫn ở http://download.oracle.com/javase/6/docs/api/java/lang/String.html. Phương thức đầu tiên mà ta xét đến là charAt; phương thức này cho phép bạn kết xuất những chữ cái từ một String. char là kiểu biến dùng được để lưu trữ từng kí tự riêng lẻ (trái ngược lại với một chuỗi các kí tự). char cũng hoạt động như các kiểu dữ liệu khác ta đã gặp:
Những giá trị của kí tự đều xuất hiện trong cặp dấu nháy đơn, như ’c’. Khác với giá trị của chuỗi (xuất hiện giữa cặp dấu nháy kép), các giá trị kí tự chỉ có thể chứa một chữ cái hoặc một kí hiệu.Sau đây là cách dùng phương thức charAt:
fruit.charAt() có nghĩa rằng tôi đang kích hoạt phương thức charAt lên đối tượng có tên fruit. Tôi đang truyền đối số 1 vào phương thức này, tức là tôi đang muốn biết chữ cái đầu tiên của chuỗi là gì. Kết quả là một kí tự, và được lưu vào trong một char có tên letter. Khi tôi in ra giá trị của letter, tôi bị bất ngờ:a a không phải là chữ cái đầu tiên của "banana". Trừ khi bạn nghiên cứu khoa học máy tính. Vì những lí do kĩ thuật mà giới khoa học máy tính đều đếm từ số không. Chữ cái thứ 0 của "banana" là chữ b. Chữ cái thứ 1 là a và thứ 2 là n. Nếu bạn muốn biết chữ cái thứ 0 của một chuỗi, bạn phải truyền tham số là 0:
8.2 LengthPhương thức tiếp theo đối với String mà ta xét đến là length, vốn trả lại số kí tự có trong chuỗi. Chẳng hạn:
length không nhận đối số truyền vào, và trả lại một số nguyên, trong trường hợp này bằng 6. Lưu ý rằng việc có một biến trùng tên với phương thức là hoàn toàn hợp lệ (mặc dù điều này có thể gây nhầm lẫn đối với người đọc mã lệnh).Để tìm chữ cái cuối cùng trong chuỗi, bạn có thể bị xui khiến để thử theo cách làm sau:
Cách này không có tác dụng. Lý do là không có chữ cái thứ 6 nào trong "banana". Vì ta đã bắt đầu đếm từ 0, nên sáu chữ cái trong chuỗi được đếm từ 0 tới 5. Để lấy chữ cái cuối cùng, ta phải trừ length đi một.
8.3 Duyệt chuỗiMột công việc thường làm với một chuỗi là bắt đầu từ điểm đầu của chuỗi, lần lượt chọn từng kí tự, thực hiện một số thao tác đối với chữ cái đó, và công việc được tiếp diễn cho các chữ cái còn lại đến hết chuỗi. Kiểu xử lý như thế này được gọi là duyệt. Một cách tự nhiên để thực hiện việc duyệt là dùng vòng lặp a 5:
Vòng lặp này để duyệt chuỗi và hiển thị từng chữ cái trên một dòng riêng. Lưu ý điều kiện lặp là a 6, nghĩa là khi a 7 bằng với chiều dài của chuỗi, thì điều kiện bị vi phạm, và phần thân của vòng lặp không được thực hiện. Kí tự cuối cùng được truy cập đến sẽ tương ứng với chỉ số a 8. Tên của biến vòng lặp là index (có nghĩa là “chỉ số”). Một chỉ số là một biến hay giá trị được dùng để chỉ định một thành viên của một tập hợp được xếp thứ tự, trong trường hợp này là chuỗi các kí tự. Chỉ số có nhiệm vụ chỉ định thành viên nào bạn cần biết (vì vậy mà nó có tên “chỉ số”). 8.4 Lỗi thực thiTrở về Mục 1.3.2 tôi đã nói tới các lỗi thực thi, những lỗi không xuất hiện đến tận khi chương trình bắt đầu chạn. Trong Java, những lỗi thực thi được gọi là các biệt lệ. Có thể bạn không thấy nhiều lỗi thực thi, song vì ta chưa thực hiện nhiều thao tác có khả năng gây nên những lỗi loại này. Và bây giờ ta sẽ gây lỗi. Nếu bạn dùng phương thức charAt rồi cung cấp một chỉ số là số âm hoặc lớn hơn length-1, Java sẽ phát ra một biệt lệ. Bạn có thể hình dung việc “phát” biệt lệ cũng như phát ra một cơn giận dữ. Khi điều này xảy đến, Java in ra một thông báo lỗi có ghi kiểu biệt lệ và một lần vết ngăn xếp, trong đó có biểu thị những phương thức đang hoạt động khi có biệt lệ xảy ra. Sau đây là một ví dụ: public class BadString { public static void main(String[] args) { }
public static void processWord(String s) { }
public static char getLastLetter(String s) { }
}Lưu ý rằng lỗi nằm trong getLastLetter: chỉ số của kí tự cuối cùng đáng ra phải là s.length()-1. Sau đây là kết quả bạn thu được: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
Sau đó chương trình kết thúc. Lần vết ngăn xếp này có thể khó đọc, song nó chứa đựng rất nhiều thông tin.8.5 Đọc tài liệuNếu bạn truy cập đến http://download.oracle.com/javase/6/docs/api/java/lang/String.html và kích chuột vào charAt, bạn sẽ xem được tài liệu sau đây (hoặc với nội dung tương tự):
0Dòng đầu tiên là nguyên mẫu của phương thức, có nhiệm vụ quy định tên của phương thức, kiểu dữ liệu của các tham số cũng như kiểu trả lại. Dòng tiếp theo miêu tả những công việc mà phương thức thực hiện. Các dòng sau đó giải thích các tham số và giá trị trả lại. Trong trường hợp này, việc giải thích là quá thừa, nhưng tài liệu luôn được thiết kế để phù hợp một dạng mẫu tiêu chuẩn. Còn dòng cuối cùng mô tả các biệt lệ mà phương thức này có thể phát ra. Có lẽ bạn sẽ mất chút thời gian để làm quen với kiểu tài liệu thế này, nhưng thời gian công sức bỏ ra cũng đáng. 8.6 Phương thức indexOfindexOf là phép nghịch đảo của charAt: charAt nhận vào một chỉ số rồi trả lại kí tự ở vị trí chỉ số đó; indexOf nhận một kí tự rồi tìm chỉ số mà kí tự đó xuất hiện. charAt thất bại nếu chỉ số nằm ngoài phạm vi chuỗi, khi đó phương thức này sẽ phát biệt lệ. indexOf thất bại nếu kí tự không có mặt trong chuỗi, và trả lại giá trị -1.
1Đoạn mã lệnh này tìm chỉ số của chữ cái ’a’ trong chuỗi. Với trường hợp này, chữ cái nêu trên xuất hiện ba lần, nên ta chưa thấy ngay rằng indexOf nên làm gì. Nhưng theo tài liệu, thì phương thức này sẽ trả lại chỉ số của lần xuất hiện đầu tiên. Để tìm các lần xuất hiện tiếp theo, còn có một dạng khác của indexOf. Nó nhận vào một đối số thứ hai quy định xem cần bắt đầu tìm kiếm từ vị trí nào trong chuỗi. Đây là một dạng quá tải toán tử, để biết thêm chi tiết, bạn hãy xem Mục . Nếu ta kích hoạt:
2nó sẽ bắt đầu ở chữ cái số hai (chữ n đầu tiên) rồi tìm chữ a thứ hai, vốn có chỉ số là 3. Nếu tình cờ chữ cái đó xuất hiện ngay ở chỉ số khởi đầu, thì câu trả lời chính là chỉ số đầu này. Bởi vậy
3sẽ trả lại 5. 8.7 Lặp quay vòng và đếmChương trình dưới đây đếm số lần xuất hiện của chữ ’a’ trong một chuỗi:
4Chương trình này cho thấy một cách viết quen tay thông dụng, đó là một biến đếm. Biến count được khởi tạo bằng không và sau đó tăng thêm một ứng với mỗi lần ta tìm thấy một chữ ’a’. Việc tăng ở đây là chỉ tăng thêm một đơn vị; nó ngược lại với thao tác giảm. Khi ta thoát khỏi vòng lặp, count sẽ chứa kết quả, đó là tổng số các chữ a. 8.8 Các toán tử tăng và giảmTăng và giảm là những thao tác thông dụng đến nỗi Java có những toán tử riêng cho chúng. Toán tử ++ cộng thêm một vào giá trị hiện thời của một int hay char. -- thì trừ đi một. Hai toán tử trên đều không có tác dụng đối với double, boolean hay String. Về khía cạnh kĩ thuật, sẽ hoàn toàn hợp lệ nếu ta tăng một biến rồi đồng thời sử dụng nó trong một biểu thức. Chẳng hạn, bạn có thể thấy lệnh kiểu như sau:
5Nhìn vào câu lệnh này, thật không rõ là liệu việc tăng sẽ tiến hành trước hay sau khi giá trị được in ra. Bởi vì những biểu thức thế này có xu hướng gây nhầm lẫn, tôi khuyên bạn nên hạn chế sử dụng chúng. Thậm chí, để hạn chế hơn nữa, tôi sẽ không nói cho bạn biết kết quả bằng bao nhiêu. Nếu thực sự muốn biết, bạn có thể thử xem. Bằng cách dùng toán tử tăng, ta có thể viết lại mã lệnh đếm chữ:\
6Một lỗi sai thường gặp là viết lệnh kiểu như sau:
7Tuy nhiên, cách này lại hợp lệ về mặt cú pháp, nên trình biên dịch sẽ không cảnh báo bạn. Hiệu ứng của lệnh này là giữ nguyên giá trị của index. Đây thường là một lỗi khó tìm ra. Hãy nhớ, bạn có thể viết index = index+1, hay index++, nhưng đừng trộn lẫn hai cách viết này. 8.9 String có tính không đổiNhư đã đọc tài liệu về các phương thức của String, có thể bạn phát hiện ra hai phương thức toUpperCase và toLowerCase. Hai phương thức này thường gây nhầm lẫn, vì chúng có tên gọi nghe như thể chúng có tác dụng thay đổi chuỗi hiện có. Song thực ra, chẳng có phương thức nào nói chung và hai phương thức này nói riêng, có thể thay đổi được chuỗi, vì chuỗi có tính không đổi. Khi bạn kích hoạt toUpperCase đối với một String, bạn sẽ thu được một String mới làm kết quả trả lại. Chẳng hạn:
8Sau khi dòng lệnh thứ hai được thực thi, upperName sẽ chứa giá trị "ALAN TURING", còn name vẫn chứa "Alan Turing". 8.10 String có tính không so sánh đượcTa thường cần so sánh hai chuỗi để xem chúng có giống nhau không, hay chuỗi nào sẽ xếp trước theo thứ tự bảng chữ cái. Thật tuyệt nếu ta sử dụng được các toán tử so sánh như == và >, song ta không thể làm vậy. Để so sánh các String, ta phải dùng các phương thức equals và compareTo. Chẳng hạn:
9Cú pháp ở đây hơi kì quặc. Để so sánh hai String, bạn phải kích hoạt một phương thức lên một chuỗi rồi truyền chuỗi còn lại làm tham số. Giá trị trả về từ equals thật dễ hiểu; true nếu hai chuỗi có chứa cùng các kí tự, và false trong trường hợp còn lại. Giá trị trả về từ compareTo lại kì quặc. Đó là khoảng cách giữa hai chữ cái đầu tiên có sự khác biệt ở hai chuỗi. Nếu hai chuỗi bằng nhau thì khoảng cách này bằng 0. Nếu chuỗi thứ nhất (chuỗi mà ta kích hoạt phương thức lên) đứng trước theo thứ tự bảng chữ cái, thì khoảng cách này có giá trị âm. Ngược lại, khoảng cách có giá trị dương. Trong trường hợp này, giá trị trả lại bằng 8, vì chữ cái thứ hai của “Ada” đi trước chữ cái thứ hai của “Alan” là 8 vị trí. Để trọn vẹn, tôi cũng nói thật rằng việc dùng toán tử == đối với các Strings là hợp lệ nhưng ít khi đúng đắn. Tôi sẽ giải thích lí do trong Mục ; song bây giờ thì chưa. 8.11 Thuật ngữđối tượng: Một tập hợp các dữ liệu có liên quan cùng với một tập các phương thức hoạt động với nó. Các đối tượng mà ta dùng cho đến giờ gồm có String, Bug, Rock, và những đối tượng khác trong GridWorld. chỉ số: Một biến hay giá trị được dùng để chọn một trong các thành viên (phần tử) của một tập hợp được xếp thứ tự, như chọn kí tự từ một chuỗi. biệt lệ: Một lỗi khi thực thi chương trình. phát: Gây nên một biệt lệ. lần vết ngăn xếp: Một bản báo cáo cho thấy trạng thái chương trình khi có biệt lệ xảy ra.occurs. nguyên mẫu: Dòng đầu tiên của một phương thức, trong đó quy định tên, các tham số và kiểu trả lại. duyệt: Việc lặp qua tất cả mọi phần tử của một tập hợp nhằm thực hiện một công việc tương tự đối với từng phần tử. biến đếm: Một biến dùng để đếm thứ gì đó; biến này thường được khởi tạo bằng không sau đó tăng thêm. tăng: Việc tăng giá trị của biến thêm một đơn vị. Toán tử tăng trong Java là ++. giảm: Việc giảm giá trị của biến thêm đi đơn vị. Toán tử giảm trong Java là --. 8.12 Bài tậpBài tập 1 Hãy viết một phương thức nhận vào một String làm đối số rồi in tất cả các chữ cái theo chiều ngược lại trên cùng một dòng. Bài tập 2 Hãy đọc nội dung lần vết ngăn xếp ở Mục 8.4 rồi trả lời những câu hỏi sau:
Bài tập 3 Hãy bao bọc đoạn mã ở Mục vào một phương thức có tên countLetters , sau đó khái quát hoá sao cho nó chấp nhận các đối số là chuỗi và chữ cái cần đếm. Tiếp theo, viết lại phương thức sao cho nó sử dụng indexOf để định vị các chữ a, thay vì kiểm tra từng chữ cái một. Bài tập 4 Mục đích của bài tập này là ôn lại phép bao bọc và khái quát hoá.
a 0 Bài tập 5 Mục đích của bài tập này là khám phá những kiểu dữ liệu trong Java và điền vào một số thông tin chi tiết chưa được đề cập đến trong chương này.
Bài tập 6 Kết quả của chương trình dưới đây là gì? Bằng một câu, hãy mô tả xem mystery làm gì (chứ không phải các bước thực hiện ra sao). a 1 Bài tập 7 Một người bạn cho bạn xem phương thức sau đây và diễn giải rằng nếu number là số có hai chữ số bất kì, thì chương trình sẽ in các chữ số theo chiều ngược lại. Người ấy khẳng định rằng nếu number là 17, thì phương thức sẽ cho ra kết quả bằng 71 . Liệu người đó có đúng không? Nếu không, hãy giải thích chương trình thực sự làm gì và sửa chữa để nó cho kết quả đúng. a 2 Bài tập 8 Kết quả của chương trình sau là gì? a 3 Hãy giải thích ngắn gọn bằng 4-5 từ xem phương thức enigma thực sự làm điều gì. Bài tập 9
Bài tập 10 Một từ được gọi là “abecedarian” nếu các chữ cái trong từ đó xuất hiện theo thứ tự bảng chữ cái. Chẳng hạn, sau đây là tất cả những từ abecedarian gồm 6 chữ cái trong tiếng Anh. abdest, acknow, acorsy, adempt, adipsy, agnosy, befist, behint, beknow, bijoux, biopsy, cestuy, chintz, deflux, dehors, dehort, deinos, diluvy, dimpsy
Bài tập 11 Một dupledrome là một từ chỉ chứa các chữ cái ghép đôi, chẳng hạn như “llaammaa” hay “ssaabb”. Tôi đề ra giả thiết ràng trong tiếng Anh thông dụng không hề có dupledrome nào. Để kiểm chứng giả thiết đó, tôi muốn có chương trình đọc lần lượt các từ vựng từ một cuốn từ điển rồi kiểm tra xem từ đó có phải là dupledrome hay không. Hãy viết một phương thức mang tên isDupledrome nhận vào một String rồi trả lại một boolean để cho biết từ đó có phải là dupledrome không. Bài tập 12
Bài tập 13 Nếu bạn đã giải các bài tập GridWorld trong Chương 5, có thể bạn sẽ thích bài tập này. Mục đích là dùng toán lượng giác để khiến các con bọ (Bug) đuổi bắt lẫn nhau. Hãy sao chép file BugRunner.java thành ChaseRunner.java rồi nhập nó vào môi trường phát triển của bạn. Trước khi thay đổi bất cứ điều gì, hãy kiểm tra đảm bảo rằng bạn biên dịch và chạy được chương trình. |