java - 确定一个字符串在 Java 中是否包含 *exactly* 3 个单词和 *exactly* 2 个空格
问题描述
我基本上想检查一个字符串是否完全格式化为:"WORD1 WORD2 WORD3"
,其中 WORD1、WORD2 和 WORD3 是任意词。简而言之,我正在尝试检查一个字符串是否正好包含两个空格和三个单词;除常规字母外,没有数字和符号。
我已经广泛查看了有关 Java 中正则表达式的其他帖子,但这些帖子似乎都没有说明如何精确匹配n 个空格。类似的帖子是this,this,但它们似乎只解释了如何查找仅包含空格或是否包含任何空格的字符串。
我查看了有关如何匹配空格的Pattern 类Java 文档,它说:[ \t\n\x0B\f\r]匹配“空白字符”,我相信它包括空格、制表符、换行符、换页符和回车符。
但是当我用 Java 实现代码时,我没有得到我期望的结果:
import java.util.regex.Pattern;
public class WhiteSpace{
public static void main(String[] args) {
boolean b = Pattern.matches("[ \\t\\n\\x0B\\f\\r]", "word word word");
System.out.println(b); // This prints false instead of true even though there are 2 spaces in the string.
}
}
即使尝试只是"[ ]"
或"\\s"
似乎不起作用。我对量词也没有运气,比如x{2}?(精确匹配x两次)。令人费解的是,当我在正则表达式测试器网站(例如regex101.com)上尝试相同的东西时,我确实得到了我想要的 2 个匹配项。
一些反馈将不胜感激!
解决方案
我会String#matches
在这里使用以下正则表达式模式:
\S+\s\S+\s\S+
示例脚本:
String input = "WORD1 WORD2\tWORD3";
if (input.matches("\\S+\\s\\S+\\s\\S+")) {
System.out.println("MATCH");
}
上面的模式应该适用于正好有两个空白字符的 3 个单词,因为没有其他方法可以安排 3 个单词来达到这个要求。
编辑:
如果您只想承认三个单词中的“常规”字母,请使用:
(?i)[A-Z]+\s[A-Z]+\s[A-Z]+
推荐阅读
- python - opencv(cv2)在我的代码中检测运动的问题
- assembly - 为什么 .COM 程序中只有一个段,用于程序代码和堆栈?
- java - 使用expandAroundCenter函数的最长回文子串(LeetCode)解决方案,不是O(n ^ 3)吗?
- c - 我的程序无法正确输出行
- javascript - 文件何时完成流式传输到 AWS S3 上传 api 的事件侦听器?
- javascript - Console.log 不等待承诺
- bash - Bash:从文件名创建文件夹
- javascript - 内部函数不返回对外部函数中分配的变量的更改
- reactjs - 如何在 Material-UI 中扩展 OverridableComponent 接口
- rabbitmq - 无法使用 chef 和 testkitchen 配置 rabbitmq