问题在java中修剪日语字符串

时间:2009-01-26 13:39:54

标签: java string nlp

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

5 个答案:

答案 0 :(得分:7)

作为Mike提到的StringUtils类的替代方法,您还可以使用支持Unicode的正则表达式,仅使用Java自己的库:

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

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

" ユーザ ー名 ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")

答案 1 :(得分: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());

答案 2 :(得分:3)

尝试Apache Commons'StringUtils课程。 StringUtils.strip()方法应该适合你。

答案 3 :(得分:2)

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

  

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

您可以轻松地对自己的版本进行角色扮演。也许方法codePointAt可以用于此目的。

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

答案 4 :(得分:2)

您必须根据trim()编写自己的Character.isWhitespace()方法 - 遗憾的是,trim()没有执行其API文档所声称的内容:它仅剥离ASCII空格,而不是任何其他空格那种空白。