java - 如何将 " "表示为 Scanner 的分隔符

标签 java regex

尝试将这个简单的字符串解析为两个 float 变量结果没有我最初想象的那么简单:

-0.13 0.17%

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

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

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

我试过 useDelimiter(" ") 但没用

我做错了什么?

最佳答案

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

Determines if the specified character is white space according to Java. A character is a Java whitespace character if and only if it satisfies one of the following criteria:

  • It is a Unicode space character (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR) but is not also a non-breaking space ('\u00A0', '\u2007', '\u202F').
  • [...]

如果您想要包含不间断空格,即 '\u00A0'也是默认的 Java 空格,您需要构建一个组合它们的正则表达式一起:

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

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

关于java - 如何将 " "表示为 Scanner 的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005808/

相关文章:

java - 如何在 Java 中生成 Diffie Hellman key 并检索原始 key 字节

javascript - 结合正则表达式,匹配两者,两者都不匹配

regex - 尝试使用特定的正则表达式拆分字符串

javascript - 正则表达式匹配连续的大括号

java - 遍历 Java 中的 HashMap

java - 无法更改 Android 4.4.2 上的当前语言环境

java - 使用 Matrix4f 围绕多个轴进行框旋转

java - 为什么是 SomeClass<? super T> 不等同于 Java 泛型类型中的 SomeClass<T>?

python - 正则表达式:匹配 Python 关键字

javascript - 删除日期格式的尾随字符串