【问题标题】:Query about the trim() method in Java查询Java中的trim()方法
【发布时间】:2012-09-02 20:26:49
【问题描述】:

我之前提出了一个问题,但遭到了严厉的批评,所以我在这里再次提出。更简单,并改写为吸引那些可能担心我之前提出问题的人。

背景 我正在解析一些 HTML 以获取信息。我已经将所有内容隔离在一系列行中,但我希望抓取的内容和后面的一堆空格。为了摆脱空格,我选择使用 trim(),但我遇到了麻烦。我的代码的最后几行是测试:

System.out.println("'" + someString + "'\n'" + someString.trim() + "'");

结果是:

'Sophomore                                          '
'Sophomore                                          '

我担心我调用 trim() 的方式可能有问题,因为我们都会不时犯错,所以我这样测试:

String s = "   hello         ";
System.out.println("'" + s+ "'\n'" + s.trim() + "'");

结果是:

'  hello     '
'hello'

我的问题 我究竟做错了什么?我想要的是'大二',而不是'大二'                                        '

期待您的出色回答(提前致谢!)。

【问题讨论】:

  • 你有什么问题?
  • 不是我的反对意见,但需要链接。
  • 我想是的。但这是一个独立的。我不是拖钓或任何东西。如果这一直被否决,我最终可能会发布我的 IDE 的视频。
  • @OlinKirkland 这不是标记问题的正当理由。
  • 我认为你需要看看你的字符串是什么编码,顺便说一下,仅基于这些信息是不可能知道的

标签: java string parsing trim


【解决方案1】:

String.trim()specifically only removes 代码超过\u0020 的第一个字符之前和最后一个这样的字符之后的字符。

这不足以删除所有个可能的空白字符 - Unicode 定义了更多(代码点高于\u0020)将不会被.trim() 匹配。

也许您的空白字符不是您认为的那些?

EDIT cmets 透露,额外的字符确实是“特殊”空白字符,特别是 \u00a0,它是一个 Unicode“不间断空格”。要将那些替换为普通空格,请使用:

str = str.replace('\u00a0', ' ');

【讨论】:

  • 谢谢。可能就是这样。我一直在想这个问题。他们可能是什么?如果它们不是空格,为什么它们看起来像它们??
  • 同意。他没有向我们展示的关键是预处理文本,例如显示错误的小测试用例数据。 1+
  • @OlinKirkland 尝试遍历字符串并使用codePointAt 找出每个字符的值。例如,它们可能是备用 unicode 字符。
  • @Hovercraft,你说的预处理文本是什么意思?在我剪掉字符串的开头和结尾之前的确切副本?
  • @OlinKirkland 你应该可以写一个正则表达式(哦,讽刺的是......)用普通空格替换\u0040,然后像以前一样使用.trim
【解决方案2】:

源字符串中必须有一个非空白字符。 将以下内容添加到您的代码中,看看它会打印什么。

for (char ch : someString.toCharArray()) {
     System.out.print(Integer.toHexString(ch) + " ");
}

【讨论】:

  • 加入关于 Alnitak 答案的对话。我正在那里发布后续信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2018-12-23
  • 2021-03-16
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多