我正在处理字符串,如果两个字符/元素之间有空格,我需要将它们分开。我已经看到一个以前的职位,所以差不多一样,但它仍然没有为我的预期工作尚未。如您所想,我可以只检查字符串是否包含(“”),然后再检查空格周围的子字符串。然而,我的字符串可能在结尾包含无数的空格,尽管字符之间没有空格。因此,我的问题是“如何检测两个字符之间的空白(数字也是)”?
//字符串中包含数字的示例
String test = "2 2";
final Pattern P = Pattern.compile("^(\\d [\\d\\d] )*\\d$");
final Matcher m = P.matcher(test);
if (m.matches()) {
System.out.println("There is between space!");
}
5条答案
按热度按时间zpjtge221#
你会用
String.strip()
删除任何前导或尾随空格,后跟String.split()
. 如果有空格,数组的长度将为2或更大。如果没有,则长度为1。例子:
如果需要指定长度的数组,还可以指定拆分的限制。例如:
如果您想要一个只使用regex的解决方案,则以下regex将匹配由单个空格分隔的任意两组字符,并带有任意数量的前导或尾随空格:
s6fujrry2#
如果使用regex,肯定的lookahead和lookback也可以工作
(?<=\w)\s(?=\w)
\w
:单词字符[a-zA-Z_0-9]
\\s
:空白(?<=\\w)\\s
:正向lookback,如果空格前面有\w
\\s(?=\\w)
:正向展望,如果空格后跟\w
```List testList = Arrays.asList("2 2", " 245 ");
Pattern p = Pattern.compile("(?<=\w)\s(?=\w)");
for (String str : testList) {
}
2 2 : There is a space!
245 : There is not a space!
rjzwgtxy3#
您的模式不能按预期工作的原因是
^(\\d [\\d\\d] )*\\d$
可以简化为(\\d \\d )*\\d$
开始时重复0次或更多次括号之间的内容。然后它匹配字符串末尾的一个数字。由于重复次数为0次或更多次,因此它是可选的,并且也只匹配一个数字。
如果要检查两个非空白字符之间是否有单个空格:
正则表达式演示| java演示
pod7payv4#
使用
java代码演示。
text.trim()
将删除前导和尾随空格,\S\s+\S
模式匹配一个非空白字符,然后匹配一个或多个空白字符,然后再匹配一个非空白字符。nnsrf1az5#
下面是最简单的方法:
也可以通过链接两种方法在一行中使用速记方法: