Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Các phương thức mới của String trong Java 9

String là lớp immutable. Java 9 thêm 2 phương thức trả về IntStream: chars() và codePoints().

1. chars()

Trả về stream int zero-extended từ các char value (UTF-16 code units).

Cú pháp

public IntStream chars()

Ví dụ

import java.util.stream.IntStream;

public class StringCharsMethodTest {
    public static void main(String args[]) {
        String str = "Welcome to TutorialsPoint";
        IntStream intStream = str.chars();
        intStream.forEach(x -> System.out.printf("-%s", (char)x));
    }
}

Kết quả

-W-e-l-c-o-m-e- -t-o- -T-u-t-o-r-i-a-l-s-P-o-i-n-t

2. codePoints()

Trả về stream của Unicode code point values (xử lý đúng supplementary characters > U+FFFF).

Cú pháp

public IntStream codePoints()

Ví dụ

import java.util.stream.IntStream;

public class StringCodePointsMethodTest {
    public static void main(String args[]) {
        String str = "Welcome to Tutorix";
        IntStream intStream = str.codePoints();
        intStream.forEach(x -> System.out.print(new StringBuilder().appendCodePoint(x)));
    }
}

Kết quả

Welcome to Tutorix

So sánh chars() vs codePoints()

Đặc điểmchars()codePoints()
Đơn vịUTF-16 code unit (char)Unicode code point (int)
Supplementary char2 char (surrogate pair)1 code point
Ví dụ "😀" (U+1F600)2 phần tử: 0xD83D, 0xDE001 phần tử: 0x1F600
Dùng khiXử lý char đơn giảnXử lý Unicode chính xác

Ứng dụng thực tế

  • Đếm ký tự thực sự: str.codePoints().count().
  • Lọc ký tự: str.codePoints().filter(cp -> ...).
  • Chuyển đổi: str.codePoints().collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString().

Hai phương thức này biến String thành first-class citizen trong Stream API.