关于Java中trim()方法的查询
我早些时候问了一个问题,但遭到了严厉的批评,所以我在这里再次提出这个问题。更简单,并重新措辞,以吸引那些可能关注我之前提问方式的人 背景 我正在解析一些HTML以获取信息。我把所有的东西都隔在一系列的行中,但是我想抓住的内容和后面的一堆空格。为了消除空格,我选择使用trim(),但我遇到了麻烦。我的代码的最后几行是测试:关于Java中trim()方法的查询,java,string,parsing,trim,Java,String,Parsing,Trim,我早些时候问了一个问题,但遭到了严厉的批评,所以我在这里再次提出这个问题。更简单,并重新措辞,以吸引那些可能关注我之前提问方式的人 背景 我正在解析一些HTML以获取信息。我把所有的东西都隔在一系列的行中,但是我想抓住的内容和后面的一堆空格。为了消除空格,我选择使用trim(),但我遇到了麻烦。我的代码的最后几行是测试: System.out.println("'" + someString + "'\n'" + someString.trim() + "'"); 结果是: 'Sophomor
System.out.println("'" + someString + "'\n'" + someString.trim() + "'");
结果是:
'Sophomore '
'Sophomore '
' hello '
'hello'
我担心我调用trim()的方式可能会有问题,因为我们都会时不时出错,所以我对它进行了如下测试:
String s = " hello ";
System.out.println("'" + s+ "'\n'" + s.trim() + "'");
结果是:
'Sophomore '
'Sophomore '
' hello '
'hello'
我的问题
我做错了什么?我想要的是“二年级”,而不是“二年级”
我期待您的精彩回答(提前感谢!)。String.trim()
第一个字符前面的字符超过\u0020
,最后一个字符后面的字符
这不足以删除所有可能的空白字符-Unicode定义了多个(代码点位于\u0020
上方)将不与.trim()
匹配的字符
也许你的空白字符不是你认为的那样
EDIT评论显示,额外的字符确实是“特殊”空白字符,特别是\u00a0
,这是一种Unicode“不间断空格”。要使用普通空格替换这些空格,请使用:
str = str.replace('\u00a0', ' ');
源字符串中必须有非空白字符。 将以下内容添加到代码中,并查看打印的内容
for (char ch : someString.toCharArray()) {
System.out.print(Integer.toHexString(ch) + " ");
}
你的问题是什么?不是我的反对票,而是需要链接。我想是的。但这是一个独立的。我不是在胡闹什么的。如果我的IDE一直被否决,我可能最终会发布一段视频。@OlinKirkland这不是给问题加上标签的有效理由。我想你需要看看你的字符串是什么编码的,顺便说一句,仅仅根据这些信息是不可能知道的谢谢你。可能就是这样。我已经想了一段时间了。他们可能是什么??如果它们不是空间,为什么它们看起来像它们。他没有向我们展示的关键是预处理的文本,比如显示错误的小测试用例数据。1+@OlinKirkland尝试在字符串上循环,并使用
codePointAt
查找每个字符的值。例如,它们可能是交替的unicode字符。@Hovercraft,您所说的预处理文本是什么意思?在我切掉字符串的开头和结尾之前的确切副本?@OlinKirkland你应该能够编写一个正则表达式(哦,讽刺的是…)用普通空格替换\u0040
,然后像以前一样使用.trim
。加入关于Alnitak答案的对话。我将在那里发布后续信息。