代码之家  ›  专栏  ›  技术社区  ›  Pablo Retyk

在java中修剪日文字符串时出现问题

  •  5
  • Pablo Retyk  · 技术社区  · 17 年前

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

    6 回复  |  直到 17 年前
        1
  •  8
  •   Fabian Steeg    17 年前

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

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

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

    " ユーザ ー名 ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")
    
        2
  •  4
  •   McDowell rahul gupta    17 年前

    看一看 Unicode Normalization 以及 Normalizer 类。该类在Java 6中是新的,但您可以在 ICU4J 如果您使用的是早期的JRE,请使用库。

        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());
    
        3
  •  3
  •   Mike Sickler    17 年前

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

        4
  •  2
  •   Paul Whelan    17 年前

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

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

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

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

        5
  •  2
  •   Michael Borgwardt    17 年前

    你得自己写 trim() 方法基于 Character.isWhitespace() -不幸的是, trim() 并没有像API文档所声称的那样:它只剥离ASCII空格,而不剥离任何其他类型的空白。