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é!

Mục lục nội dung

Bài tập String trong Java có lời giải

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!

Ngày:05/10/2020 Chia sẻ bởi:Minh Ngoan

CÓ THỂ BẠN QUAN TÂM