尝试将这个简单的字符串解析为两个float
变量,结果比我最初的想法要简单得多:
-0.13 0.17%
(唯一?)原因是两个数字之间的空格实际上是
。因此,第一个scanner.next()
会返回整个字符串:
Scanner scanner = new Scanner("-0.13 0.17%");
String first = scanner.next();
我知道Scanner的useDelimiter()方法,但如何告诉它使用
作为分隔符?
我尝试了useDelimiter(" ")
,但这不起作用
我做错了什么?
答案 0 :(得分:2)
&符转义序列仅适用于HTML和XML,而不适用于Java。请尝试使用"\u00a0"
。
答案 1 :(得分:2)
160的Ascii是nbsp,所以使用你的字符串连接一个带有该值的char,它应该可以工作。
char nbsp = 160;
useDelimiter("" + nbsp);
答案 2 :(得分:2)
Scanner
类的默认分隔符为\p{javaWhitespace}+
。 \p{javaWhitespace}
由方法Character.isWhitespace
定义,根据定义排除非中断空格。
根据Java确定指定的字符是否为空格。当且仅当它满足以下条件之一时,字符才是Java空白字符:
- 它是一个Unicode空格字符(
SPACE_SEPARATOR
,LINE_SEPARATOR
或PARAGRAPH_SEPARATOR
),但也不是一个不间断的空格('\u00A0'
,'\u2007'
,'\u202F'
)。[...]
如果你想包括No-Break Space,'\u00A0'
,和也是默认的Java空格,你需要构建一个将它们组合在一起的正则表达式:
scanner.useDelimiter("[\\p{javaWhitespace}\u00A0]+");
请注意,+
背后很重要。它使整个模式与连续空格序列匹配。如果没有这个,当有连续的空格时,next()
将返回空字符串。