检查分组分隔符是否为 space

Check if a grouping separator is a space

我正在尝试检查分组分隔符 (char) 是否为 space。法语语言环境就是这种情况,但我的测试总是打印 false.

DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.forLanguageTag("fr"));
char ch = formatter.getDecimalFormatSymbols().getGroupingSeparator();
System.out.println(ch == ' '); // false
System.out.println(Character.isWhitespace(ch)); // false

您收到的 unicode 符号不是普通白色space。这是一个 不间断 space。您的 char 具有 160 而非 32 的整数表示。 要检查您是否应该使用:

Character.isSpaceChar(ch);

该方法根据 unicode 标准检查字符是否为 space。

以下方法根据 Java 规范检查字符是否为 space。

Character.isWhitespace(ch);

可以在文档中找到标准的详细说明。

分组字符不是space,而是160,这样会输出true和true

    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.forLanguageTag("fr"));
    char ch = formatter.getDecimalFormatSymbols().getGroupingSeparator();
    System.out.println(ch == 160); 
    System.out.println(Character.isSpaceChar(ch));

不间断space

getGroupingSeparator()return不间断-space。所以你可以用特定的 non-breaking-space 的 unicode 来检查它。

 public static void main(String[] args) {
    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.forLanguageTag("fr"));
    char ch = formatter.getDecimalFormatSymbols().getGroupingSeparator();
    System.out.println(formatter.getDecimalFormatSymbols().getGroupingSeparator() == '\u00A0'); // true
    System.out.println(ch == ' '); // false
    System.out.println(Character.isWhitespace(ch)); // false
}