Skip to main content

Command Palette

Search for a command to run...

Bài 9: Cải tiến về String (Java 11)

Published
5 min readView as Markdown

Mục tiêu

Bài viết này nhằm mục đích giúp bạn hiểu và sử dụng các cải tiến mới về String trong Java 11. Chúng ta sẽ xem xét các phương thức mới của lớp String, cách sử dụng chúng, các ví dụ thực tế và lợi ích mà chúng mang lại.

Nội dung

1. Giới thiệu về các cải tiến String trong Java 11

1.1 Mục đích của các cải tiến

  • Mục đích: Cải tiến các thao tác với chuỗi ký tự (String) trong Java để làm cho mã nguồn ngắn gọn, dễ đọc và hiệu quả hơn.

  • Các phương thức mới: isBlank(), lines(), strip(), repeat(), stripLeading(), stripTrailing(), indent(), và transform().

1.2 Lợi ích của các cải tiến

  • Đơn giản hóa các thao tác chuỗi: Các phương thức mới giúp đơn giản hóa các thao tác thường gặp với chuỗi.

  • Tăng hiệu suất và khả năng đọc mã nguồn: Các phương thức này giúp viết mã ngắn gọn và trực quan hơn, tăng khả năng đọc và bảo trì mã nguồn.

  • Giảm thiểu lỗi: Cung cấp các phương thức tiện lợi giúp giảm thiểu lỗi trong xử lý chuỗi.

2. Các phương thức mới trong lớp String

2.1 isBlank()

  • Mục đích: Kiểm tra xem một chuỗi có trống (chỉ chứa khoảng trắng) hay không.

  • Ví dụ:

      String str1 = "   ";
      String str2 = "Hello";
    
      System.out.println(str1.isBlank()); // Output: true
      System.out.println(str2.isBlank()); // Output: false
    

2.2 lines()

  • Mục đích: Tách chuỗi thành các dòng (dựa trên ký tự ngắt dòng) và trả về một Stream các dòng.

  • Ví dụ:

      String multilineStr = "Hello\nWorld\nJava 11";
    
      multilineStr.lines().forEach(System.out::println);
      // Output:
      // Hello
      // World
      // Java 11
    

2.3 strip()

  • Mục đích: Loại bỏ khoảng trắng ở đầu và cuối chuỗi, hỗ trợ tốt hơn trim()strip() xử lý cả các ký tự khoảng trắng Unicode.

  • Ví dụ:

      String str = "  Hello World  ";
    
      System.out.println(">" + str.strip() + "<"); // Output: >Hello World<
    

2.4 stripLeading()

  • Mục đích: Loại bỏ khoảng trắng ở đầu chuỗi.

  • Ví dụ:

      String str = "  Hello World  ";
    
      System.out.println(">" + str.stripLeading() + "<"); // Output: >Hello World  <
    

2.5 stripTrailing()

  • Mục đích: Loại bỏ khoảng trắng ở cuối chuỗi.

  • Ví dụ:

      String str = "  Hello World  ";
    
      System.out.println(">" + str.stripTrailing() + "<"); // Output: >  Hello World<
    

2.6 repeat()

  • Mục đích: Lặp lại chuỗi một số lần nhất định.

  • Ví dụ:

      String str = "Java";
    
      System.out.println(str.repeat(3)); // Output: JavaJavaJava
    

2.7 indent()

  • Mục đích: Thêm hoặc loại bỏ các khoảng trắng thụt đầu dòng cho mỗi dòng trong chuỗi.

  • Ví dụ:

      String str = "Hello\nWorld";
    
      System.out.println(str.indent(4));
      // Output:
      //     Hello
      //     World
    

2.8 transform()

  • Mục đích: Áp dụng một hàm chuyển đổi lên chuỗi và trả về kết quả.

  • Ví dụ:

      String str = "Hello";
    
      String result = str.transform(s -> s + " World");
      System.out.println(result); // Output: Hello World
    

3. Ví dụ thực tế sử dụng các cải tiến về String

3.1 Kiểm tra chuỗi trống

  • Ví dụ:

      String[] strings = {"", "   ", "\t", "Hello"};
    
      for (String str : strings) {
          if (str.isBlank()) {
              System.out.println("Blank string found");
          } else {
              System.out.println("Non-blank string: " + str);
          }
      }
      // Output:
      // Blank string found
      // Blank string found
      // Blank string found
      // Non-blank string: Hello
    

3.2 Xử lý chuỗi nhiều dòng

  • Ví dụ:

      String multilineStr = "Java\nis\nawesome";
    
      long lineCount = multilineStr.lines().count();
      System.out.println("Number of lines: " + lineCount); // Output: Number of lines: 3
    

3.3 Loại bỏ khoảng trắng không cần thiết

  • Ví dụ:

      String str = "\u2000Hello World\u2000";
    
      System.out.println("Original: >" + str + "<");
      System.out.println("Stripped: >" + str.strip() + "<");
      // Output:
      // Original: > Hello World <
      // Stripped: >Hello World<
    

3.4 Lặp lại chuỗi để tạo mẫu

  • Ví dụ:

      String pattern = "*";
    
      System.out.println(pattern.repeat(10)); // Output: **********
    

3.5 Thụt lề chuỗi

  • Ví dụ:

      String text = "Java\nProgramming";
    
      System.out.println(text.indent(2));
      // Output:
      //   Java
      //   Programming
    

4. Thực hành với các bài toán thực tế

4.1 Tạo khung văn bản

  • Bài toán: Tạo khung cho một đoạn văn bản.

  • Giải pháp:

      String text = "Hello, World!";
      String border = "*".repeat(text.length() + 4);
    
      String framedText = border + "\n" +
                          "* " + text + " *\n" +
                          border;
    
      System.out.println(framedText);
      // Output:
      // ****************
      // * Hello, World! *
      // ****************
    

4.2 Chuẩn hóa chuỗi đầu vào

  • Bài toán: Chuẩn hóa một chuỗi đầu vào từ người dùng (loại bỏ khoảng trắng thừa và kiểm tra chuỗi trống).

  • Giải pháp:

      String input = "   Hello, Java 11!   ";
    
      if (input.isBlank()) {
          System.out.println("Input is blank");
      } else {
          String normalizedInput = input.strip();
          System.out.println("Normalized input: >" + normalizedInput + "<");
          // Output: Normalized input: >Hello, Java 11!<
      }
    

4.3 Xử lý văn bản nhiều dòng

  • Bài toán: Đếm số dòng trong một văn bản và in từng dòng có thụt lề.

  • Giải pháp:

      String document = "Java 11\nprovides new\nstring methods";
    
      long lineCount = document.lines().count();
      System.out.println("Number of lines: " + lineCount); // Output: Number of lines: 3
    
      document.lines().map(line -> "  " + line)
                      .forEach(System.out::println);
      // Output:
      //   Java 11
      //   provides new
      //   string methods
    

Kết luận

Các cải tiến về String trong Java 11 mang lại nhiều phương thức tiện lợi và mạnh mẽ cho việc xử lý chuỗi. Những phương thức này giúp mã nguồn trở nên ngắn gọn, dễ đọc và bảo trì hơn. Hiểu và sử dụng thành thạo các phương thức mới này sẽ giúp bạn tận dụng tối đa sức mạnh của Java 11 trong các tác vụ liên quan đến chuỗi.


More from this blog

hoangkim

366 posts