如何将“”表示为Scanner的分隔符

时间:2013-04-15 00:09:57

标签: java regex

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

-0.13 0.17%

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

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

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

我尝试了useDelimiter(" "),但这不起作用

我做错了什么?

3 个答案:

答案 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_SEPARATORLINE_SEPARATORPARAGRAPH_SEPARATOR),但也不是一个不间断的空格('\u00A0''\u2007''\u202F')。
  •   
  • [...]
  •   

如果你想包括No-Break Space,'\u00A0'也是默认的Java空格,你需要构建一个将它们组合在一起的正则表达式:

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

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