我有以下字符串(日语)“ yuーザー名”,第一个字符是“like”空格,但它在 unicode 中的数字是 12288,所以如果我这样做 “ yuーザー名”.trim() 我得到相同的字符串(trim 没有不工作)。如果我在 C++ 中进行修剪,它可以正常工作。有谁知道如何在java中解决这个问题?unicode有特殊的修剪方法吗?
5 回答
作为StringUtils
Mike 提到的类的替代方案,您还可以使用 Unicode 感知正则表达式,仅使用 Java 自己的库:
" ユーザー名".replaceAll("\\p{Z}", "")
或者,实际上只修剪,而不是删除字符串中的空格:
" ユーザ ー名 ".replaceAll("(^\\p{Z}+|\\p{Z}+$)", "")
看看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());
试试 Apache Commons 的StringUtils类。StringUtils.strip() 方法应该适合您。
从 java 文档中,它解释了为什么这不起作用。
如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对该 String 对象的引用。
你可以很容易地扮演你自己的版本。也许方法 codePointAt 可以用于此目的。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html
您必须trim()
根据Character.isWhitespace()
- 不幸的是,trim()
它没有按照其 API 文档声称的那样编写自己的方法:它只去除 ASCII 空格,而不是任何其他类型的空格。