java正则表达式拆分会产生一个额外的空间,使用\\s,但不会删除它
我试图用正则表达式解析一个字符串,这个字符串有开头偏旁句和结尾偏旁句,它们之间列出了英文字母,用逗号分隔。每个逗号后面都有一个空格。像这样
import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.io.*;
public class StringLetters {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] temp = br.readLine().split("\\s*(\\{|,|\\}|\\s)\\s*");
for (int i = 0; i < temp.length; i++) {
System.out.println("temp[" + i + "] ===>" + temp[i]);
}
Set<String> set = new HashSet<>();
for (String a : temp) {
set.add(a);
}
System.out.println(set.size());
} catch (IOException ioe) {
}
}
}
当我把{a,b,c}作为输入传递时
$ java StringLetters
{a, b, c}
temp[0] ===>
temp[1] ===>a
temp[2] ===>b
temp[3] ===>c
4
其他输入可以是{}、{s,h,a,n,o,n,o}、{h,e,a,l,h,t}。。。等等
所以当我做
$ java StringLetters
{}
0
这是正确的,对于空字符串,我应该得到这个0
temp数组中第0位的空字符串不是我想要的,我在“(\{124;,\\}124;\ s)”中使用了\s,但这对我没有帮助
# 1 楼答案
在不调用拆分的情况下,上述任务可以按如下方式完成:-
这项任务本身很简单,但我对正则表达式很感兴趣,我想知道如何使用正则表达式来完成这项任务
# 2 楼答案
正则表达式将{视为第一个分隔符,给您一个空字符串。简单的方法是在创建
Set
时过滤数组: