如何检测字符串中两个字符(含数字)之间是否存在空格?
检测字符串中字符/数字之间的空格
我明白你的需求了——你要找的是两个非空白字符(包括数字)中间夹着空格的情况,而忽略字符串开头或结尾的冗余空格对吧?你之前尝试的正则表达式太局限了,只能匹配特定格式的数字串,没法满足通用场景,我来给你几个更合适的解决方案:
通用场景:检测任意字符之间的空格
如果你的字符串里可能包含字母、数字等各种非空白字符,想要检测是否存在“字符+空格+字符”的结构,可以用这个正则表达式:\S \S,其中:
\S代表任意非空白字符(和\s相反,\s匹配空格、制表符等空白内容)\S \S精准匹配“非空白字符 + 空格 + 非空白字符”的片段
对应的Java代码示例:
String test = "2 2"; // 编译正则:匹配任意非空白字符之间的空格 Pattern pattern = Pattern.compile("\\S \\S"); Matcher matcher = pattern.matcher(test); if (matcher.find()) { System.out.println("存在字符之间的空格!"); }
这个方案能覆盖各种情况:
- ✅ 匹配
"2 2"、"a b"、"x 123"这类字符间有空格的字符串 - ❌ 不匹配
"22 "(仅结尾空格)、" 22"(仅开头空格)、" "(全是空格)
仅针对数字场景:检测数字之间的空格
如果你的需求只限定在数字之间的空格,可以把正则里的\S换成\d(匹配数字),也就是\d \d:
String test = "2 2"; // 编译正则:匹配数字之间的空格 Pattern numPattern = Pattern.compile("\\d \\d"); Matcher numMatcher = numPattern.matcher(test); if (numMatcher.find()) { System.out.println("存在数字之间的空格!"); }
为什么你原来的正则不好用?
你之前写的 ^(\\d [\\d\\d] )*\\d$ 是要求整个字符串符合“数字+空格+1-2位数字+空格”重复多次,最后以数字结尾的格式,比如只能匹配 "2 2"、"3 45 6" 这类特定结构的字符串,一旦字符串有开头空格、或者数字位数不对,就会匹配失败,完全没法满足“检测是否存在字符间空格”的核心需求。
内容的提问来源于stack exchange,提问作者Arrakha
相关产品推荐
相关产品推荐

