1

尝试将这个简单的字符串解析为两个float变量,结果比我最初想象的要简单:

-0.13 0.17%

(唯一?)原因是两个数字之间的空格实际上是 a  。所以第一个scanner.next()返回整个字符串:

Scanner scanner = new Scanner("-0.13 0.17%");
String first = scanner.next(); 

我知道 Scanner 的useDelimiter()方法,但我如何告诉它 用作分隔符?

我试过useDelimiter(" ")了,但没用

我究竟做错了什么?

4

3 回答 3

2

&符号转义序列仅适用于 HTML 和 XML,不适用于 Java。尝试改用"\u00a0".

于 2013-04-15T00:12:36.543 回答
2

160 的 Ascii 是 nbsp,因此将具有该值的字符与您的字符串连接起来,它应该可以工作。

char nbsp = 160;
useDelimiter("" + nbsp);
于 2013-04-15T00:13:15.847 回答
2

类的默认分隔符Scanner\p{javaWhitespace}+. \p{javaWhitespace}由方法定义,该方法Character.isWhitespace根据定义排除不间断空格。

根据 Java 确定指定字符是否为空格。一个字符是一个 Java 空白字符当且仅当它满足以下条件之一:

  • 它是 Unicode 空格字符(SPACE_SEPARATOR、、LINE_SEPARATORPARAGRAPH_SEPARATOR),但也不是不间断空格('\u00A0'、、、'\u2007''\u202F'
  • [...]

如果要包含无间断空格(即 )'\u00A0'以及默认的 Java 空格,则需要构造一个将它们组合在一起的正则表达式:

scanner.useDelimiter("[\\p{javaWhitespace}\u00A0]+");

注意+后面很重要。它使整个模式与连续的空格序列匹配。如果没有这个,next()当有连续的​​空格时将返回空字符串。

于 2013-04-15T00:40:45.250 回答