我之前问了一个问题,但遇到了严厉的批评,所以我再次提出这个问题。更简单,并改为吸引那些可能一直关注我之前问过的人。
背景 我正在解析一些HTML信息。我已经在一系列线条中隔离了所有内容,但我希望抓住它的内容以及它之后的一堆空格。为了摆脱空间,我选择使用trim(),但我一直遇到麻烦。我的代码的最后几行是测试:
System.out.println("'" + someString + "'\n'" + someString.trim() + "'");
结果是:
'Sophomore '
'Sophomore '
我担心我调用trim()的方式可能有问题,因为我们都会不时出错,所以我测试了这样:
String s = " hello ";
System.out.println("'" + s+ "'\n'" + s.trim() + "'");
结果是:
' hello '
'hello'
我的问题 我究竟做错了什么?我想要的是获得“二年级学生”,而不是“二年级学生”
我期待您的出色答案(提前感谢!)。
答案 0 :(得分:3)
String.trim()
的第一个字符之前的 \u0020
specifically only removes个字符,以及最后一个字符之后的字符。
这不足以删除所有可能的空格字符 - Unicode定义了多个(\u0020
以上的代码点).trim()
无法匹配。
也许你的白色空间字符不是你认为的那些?
EDIT 评论显示,额外的字符确实是“特殊的”空白字符,特别是\u00a0
,这是一个Unicode“非破坏空间”。要替换普通空格,请使用:
str = str.replace('\u00a0', ' ');
答案 1 :(得分:1)
源字符串中必须有非空白字符。 将以下内容添加到您的代码中,看看它打印的内容。
for (char ch : someString.toCharArray()) {
System.out.print(Integer.toHexString(ch) + " ");
}