Bài tập String trong Java có lời giải
Để củng cố phần lý thuyết đã học về String, hôm nay eLib giới thiệu đến bạn một số bài tập. Các bạn cùng thử nhé!
1. Bài 1
Đề bài: Nhập một sâu ký tự. Viết chương trình đếm số từ trong một chuỗi trong Java. Mỗi từ cách nhau bởi một khoảng trắng (tab, space, ...) Ví dụ ” hoc java co ban den nang cao ” có 7 từ.
Lời giải
Thuật toán:
- Nếu chuỗi đã cho input = null thì trả về -1. Kết thúc tại đây.
- Ngược lại, duyệt từ phần tử đầu tiên đến phần tử cuối cùng của chuỗi.
- Nếu ký tự hiện tại là ký tự chữ (ký tự khác space và tab và xuống dòng) thì ta tìm được một từ. Và đánh dấu từ đó đã được đếm (notCounted = false;). Đến khi gặp ký tự space hoặc tab hoặc xuống dòng thì đánh dấu từ đó đã đếm xong (notCounted = true;) để đếm từ tiếp theo.
File: StringExample1.java
package vn.eLib.baitap;
/**
* Chương trình đếm số từ của một chuỗi trong java
*
* @author eLib.vn
*/
public class StringExample1 {
public static final char SPACE = ' ';
public static final char TAB = '\t';
public static final char BREAK_LINE = '\n';
/**
* main
*
* @param args
*/
public static void main(String[] args) {
String str = "hoc java co ban den nang cao" + " \n test";
System.out.print("Số từ của chuỗi đã cho là: " + countWords(str));
}
/**
* Đếm số từ của một chuỗi,
* giả sử các từ được ngăn cách nhau bởi một hoặc nhiều
* dấu 'space', tab '\t' và xuống dòng '\n'
*
* @param input - chuỗi ký tự
* @return số từ của chuỗi ký tự input
*/
public static int countWords(String input) {
if (input == null) {
return - 1;
}
int count = 0;
int size = input.length();
boolean notCounted = true;
for (int i = 0; i < size; i++) {
if (input.charAt(i) != SPACE && input.charAt(i) != TAB && input.charAt(i) != BREAK_LINE) {
if (notCounted) {
count++;
notCounted = false;
}
} else {
notCounted = true;
}
}
return count;
}
}
Kết quả:
Số từ của chuỗi đã cho là: 8
2. Bài 2
Đề bài: Nhập một sâu ký tự. Viết chương trình java liệt kê số lần xuất hiện của các từ trong một chuỗi.
Lời giải
Trong bài này chúng tôi sử dụng StringBuilder thay vì String trong java để build một từ và sử dụng TreeMap để lưu các từ tìm được và số lần xuất hiện của chúng trong chuỗi đã cho.
File: StringExample2.java
package vn.eLib.baitap;
import java.util.Map;
import java.util.TreeMap;
/**
* Chương trình liệt kê số lần xuất hiện của các từ của một chuỗi
* trong java
*
* @author eLib.vn
*/
public class StringExample2 {
public static final char SPACE = ' ';
public static final char TAB = '\t';
public static final char BREAK_LINE = '\n';
/**
* main
*
* @param args
*/
public static void main(String[] args) {
String str = "hoc java co ban den nang cao" + " \n hoc c++ co ban den nang cao.";
System.out.println("---------------------------------");
System.out.println(str);
System.out.println("---------------------------------");
// liệt kê sô lần xuất hiện của các từ trong chuỗi trên
System.out.println("Liệt kê số lần xuất hiện của các từ: ");
Map < String,
Integer > wordMap = countWords(str);
for (String key: wordMap.keySet()) {
System.out.print(key + " " + wordMap.get(key) + "\n");
}
}
/**
* Đếm số từ của một chuỗi,
* giả sử các từ được ngăn cách nhau bởi một hoặc nhiều
* dấu 'space', tab '\t' và xuống dòng '\n'
*
* @param input - chuỗi ký tự
* @return số từ của chuỗi ký tự input
*/
public static Map < String,
Integer > countWords(String input) {
// khởi tạo wordMap
Map < String,
Integer > wordMap = new TreeMap < String,
Integer > ();
if (input == null) {
return wordMap;
}
int size = input.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
if (input.charAt(i) != SPACE && input.charAt(i) != TAB && input.charAt(i) != BREAK_LINE) {
// build một từ
sb.append(input.charAt(i));
} else {
// thêm từ vào wordMap
addWord(wordMap, sb);
sb = new StringBuilder();
}
}
// thêm từ cuối cùng tìm được vào wordMap
addWord(wordMap, sb);
return wordMap;
}
/**
* Thêm từ vào wordMap
*
* @param wordMap: map chứa các từ và số lần xuất hiện
* @param sb: từ cần thêm vào wordMap
*/
public static void addWord(Map < String, Integer > wordMap, StringBuilder sb) {
String word = sb.toString();
if (word.length() == 0) {
return;
}
if (wordMap.containsKey(word)) {
int count = wordMap.get(word) + 1;
wordMap.put(word, count);
} else {
wordMap.put(word, 1);
}
}
}
Kết quả:
---------------------------------
hoc java co ban den nang cao
hoc c++ co ban den nang cao.
---------------------------------
Liệt kê số lần xuất hiện của các từ:
ban 2
c++ 1
cao 1
cao. 1
co 2
den 2
hoc 2
java 1
nang 2
Lưu ý: trong một số trường hợp phải thao tác nhiều với một chuỗi bạn nên sử dụng StringBuilder thay vì sử dụng String nhé.
3. Bài 3
Đề bài: Viết chương trình java kiểm tra xem chuỗi s1 chứa chuỗi s2 không?
Lời giải
Để kiểm tra chuỗi s1 chứa chuỗi s2 hay không, bạn có thể sử dụng phương thức contains() trong java.
File: StringExample3.java
package vn.eLib.baitap;
public class StringExample3 {
public static void main(String[] args) {
String str1 = "hoc java co ban den nang cao.";
String str2 = "java co ban";
System.out.println(str1.contains(str2));
}
}
Kết quả:
true
Trên đây là 3 bài tập cơ bản về chuỗi trong Java mà eLib muốn giới thiệu đến bạn. Còn rất nhiều dạng bài tập liên quan đến chuỗi, bạn có thể tham khảo trên các bài viết của eLib. Chúc các bạn thành công!
Tham khảo thêm
- doc Bài tập tự luận java cơ bản có lời giải
- docx Câu hỏi trắc nghiệm ôn tập Java cơ bản
- docx Ngân hàng câu hỏi trắc nghiệm Java có đáp án
- doc Bài tập Array trong Java có lời giải
- doc Bài tập về các thuật toán sắp xếp trong Java có lời giải
- doc Bài tập tự luận Java nâng cao có lời giải