5

我有以下字符串(日语)“ yuーザー名”,第一个字符是“like”空格,但它在 unicode 中的数字是 12288,所以如果我这样做 “ yuーザー名”.trim() 我得到相同的字符串(trim 没有不工作)。如果我在 C++ 中进行修剪,它可以正常工作。有谁知道如何在java中解决这个问题?unicode有特殊的修剪方法吗?

4

5 回答 5

8

作为StringUtilsMike 提到的类的替代方案,您还可以使用 Unicode 感知正则表达式,仅使用 Java 自己的库:

" ユーザー名".replaceAll("\\p{Z}", "")

或者,实际上只修剪,而不是删除字符串中的空格:

" ユーザ ー名 ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")
于 2009-01-26T14:25:50.967 回答
4

看看Unicode NormalizationNormalizer类。该类是 Java 6 中的新类,但如果您使用的是较早的 JRE ,您会在ICU4J库中找到等效版本。

    int character = 12288;
    char[] ch = Character.toChars(character);
    String input = new String(ch);
    String normalized = Normalizer.normalize(input, Normalizer.Form.NFKC);

    System.out.println("Hex value:\t" + Integer.toHexString(character));
    System.out.println("Trimmed length           :\t"
            + input.trim().length());
    System.out.println("Normalized trimmed length:\t"
            + normalized.trim().length());
于 2009-01-26T14:13:05.797 回答
3

试试 Apache Commons 的StringUtils类。StringUtils.strip() 方法应该适合您。

于 2009-01-26T13:48:32.007 回答
2

从 java 文档中,它解释了为什么这不起作用。

如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对该 String 对象的引用。

你可以很容易地扮演你自己的版本。也许方法 codePointAt 可以用于此目的。

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html

于 2009-01-26T13:47:41.760 回答
2

您必须trim()根据Character.isWhitespace()- 不幸的是,trim()它没有按照其 API 文档声称的那样编写自己的方法:它只去除 ASCII 空格,而不是任何其他类型的空格。

于 2009-01-26T13:47:48.407 回答