Java - 如何使用.useDelimiter()将dilimiter设置为多个不同的东西?

时间:2017-04-23 22:41:02

标签: java java.util.scanner

我希望使用Scanner类方法:.useDilimiter()来解析文件,之前我会使用一系列.replaceAll()语句来替换我想要的稀释符与white space合作。

无论如何,我尝试将Scanner的任意字符稀释为.(){}[],!standard white space。我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

扫描程序使用正则表达式(正则表达式)来描述分隔符。默认情况下,\p{javaWhitespace}+表示一个或多个(由于+运算符)空格。

在正则表达式中,我们可以使用character class [...]来表示来自字符集的单个字符。但由于正则表达式中的[]表示字符类的开头和结尾,因此这些字符是元字符(甚至在字符类中)。要将它们视为文字,我们需要首先逃避它们。我们可以通过

来做到这一点
  • 在他们之前添加\(在字符串中写为"\\"),
  • 或将它们放在代表引用部分的\Q...\E中(其中所有字符都被视为文字,而不是元字符)。

因此代表( ) { } [ ] , !个字符之一的正则表达式看起来像"[\\Q(){}[],!\\E]"

如果要添加对标准分隔符的支持,可以使用OR运算符\p{javaWhitespace}+将此正则表达式与|结合使用。

所以你的代码看起来像:

yourScanner.useDelimiter("[\\Q(){}[],!\\E]|\\p{javaWhitespace}+");