我有以下字符串(日语)“ユーザー名”,第一个字符是“喜欢”空格,但它在unicode中的数字是12288,所以如果我做“ユーザー名”.trim()我得到相同的字符串(修剪不起作用)。 如果我用c ++修剪它可以正常工作。 有谁知道如何在java中解决这个问题? unicode有特殊的修剪方法吗?
答案 0 :(得分:7)
作为Mike提到的StringUtils
类的替代方法,您还可以使用支持Unicode的正则表达式,仅使用Java自己的库:
" ユーザー名".replaceAll("\\p{Z}", "")
或者,实际上只修剪,而不是删除字符串中的空格:
" ユーザ ー名 ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")
答案 1 :(得分:4)
查看Unicode Normalization和Normalizer课程。该类是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空格,而不是任何其他空格那种空白。