无法识别Java正则表达式空白

无法识别Java正则表达式空白,java,regex,whitespace,Java,Regex,Whitespace,我试图使用“java.util.regex.Pattern”从文本文件捕获赋值操作。我一直很沮丧地试图修复我的正则表达式,以便真正识别我要找的东西。我已经尽可能地简化了这个问题,并且发现了一个关于拾取空白的问题 ,并揭示了处理空白字符集的问题,但没有回答以下问题: Pattern p = Pattern.compile("adfa ="); Scanner sc = new Scanner("adfa ="); if(sc.hasNext(p)) { String s = sc.nex

我试图使用“java.util.regex.Pattern”从文本文件捕获赋值操作。我一直很沮丧地试图修复我的正则表达式,以便真正识别我要找的东西。我已经尽可能地简化了这个问题,并且发现了一个关于拾取空白的问题

,并揭示了处理空白字符集的问题,但没有回答以下问题:

Pattern p = Pattern.compile("adfa =");
Scanner sc = new Scanner("adfa =");

if(sc.hasNext(p))
{
    String s = sc.next(p);
    System.out.println(">" + s + "<");
}
else
    System.out.println(":(");
将拾取以下字符串:

"adfa="
但不是:

"adfa ="
只需进行以下更改:

Pattern p = Pattern.compile("adfa=");
Scanner sc = new Scanner("adfa=");
一切按计划进行!有人能解释出哪里出了问题吗?

从文档中可以看出:-

如果下一个完整标记与指定模式匹配,则返回true。 一个完整的令牌由匹配 分隔符模式

现在,由于
扫描器的默认分隔符模式是
\p{javaWhitespace}+
。使用以下方法查找:-

Scanner sc = new Scanner("abdc =");
System.out.println(sc.delimiter());  // Prints \p{javaWhitespace}+
因此,当您的
扫描仪
遇到字符串中的
空白时。它假定
标记
已结束。因此停止,并尝试将读取标记与您的模式匹配。当然它失败了,因此
sc.hasNext(p)
return
false
。这就是问题所在。

从文档中可以看出:-

如果下一个完整标记与指定模式匹配,则返回true。 一个完整的令牌由匹配 分隔符模式

现在,由于
扫描器的默认分隔符模式是
\p{javaWhitespace}+
。使用以下方法查找:-

Scanner sc = new Scanner("abdc =");
System.out.println(sc.delimiter());  // Prints \p{javaWhitespace}+
因此,当您的
扫描仪
遇到字符串中的
空白时。它假定
标记
已结束。因此停止,并尝试将读取标记与您的模式匹配。当然它失败了,因此
sc.hasNext(p)
return
false
。这就是问题所在。

如果下一个完整的令牌与指定的模式匹配,则From返回true。完整的标记由与分隔符模式匹配的输入作为前缀和后缀

在Scanner中,withespace是默认的分隔符,因此在您的示例中,Scanner尝试将标记“adfa”与正则表达式匹配,而正则表达式不匹配。如果将分隔符更改为其他内容,如换行符:

sc.useDelimiter("\n");
你的正则表达式应该有用

编辑:我的回答有点晚了

如果下一个完整的标记与指定的模式匹配,From将返回true。完整的标记由与分隔符模式匹配的输入作为前缀和后缀

在Scanner中,withespace是默认的分隔符,因此在您的示例中,Scanner尝试将标记“adfa”与正则表达式匹配,而正则表达式不匹配。如果将分隔符更改为其他内容,如换行符:

sc.useDelimiter("\n");
你的正则表达式应该有用


编辑:我的回答有点晚了

编辑:请阅读默认值实际上是任何空格。谢谢不确定我是如何设法不读取它的,并假定分隔符是“\n”或EOF。@Daeden。。尝试打印
sc.delimiter()
的值。您将得到
\p{javaWhitespace}+
。我希望这能说明问题。编辑:请阅读默认值实际上是任何空格。谢谢不确定我是如何设法不读取它的,并假定分隔符是“\n”或EOF。@Daeden。。尝试打印
sc.delimiter()
的值。您将得到
\p{javaWhitespace}+
。我希望这能说明问题。尽管如此,我还是感谢你的回答!尽管如此,我还是感谢你的回应!