如何分隔(?abcd.efgdf)字符串?
我想要得到的是 "?abcd" 和 "efgdf" 分开并转移到另一个字符串容器。
我知道 split(".") 的用法,但是如果有两个这样的字符串怎么办? 前任。 (?abcd.efgdf) (?xcv.qwer) 分割第二个字符串包含第一个字符串的结尾,即“efgdf”。所以使用 split(".") 不是一个选择。
是否有任何分离此字符串的实现?
最佳答案
您可以使用正则表达式\(|\.|\)\s*\(|\)\??
。
它包括所有这些分隔符:
(
第一个左括号.
句点)\s*(
括号之间可选空格s。)
右括号?
第 4 点后面的可选问号 .
但它可能会创建一些空字符串,因此使用 java 8 流,您可以删除它们。这是代码
测试用例 1
String s = "(?abcd.efgdf)?";
String[] arr = Arrays.asList(s.split("\\(|\\.|\\)\\s*\\(|\\)\\??")).stream().filter(str -> !str.isEmpty()).collect(Collectors.toList()).toArray(new String[0]);
for (String a: arr) System.out.println(a);
输出
?abcd
efgdf
测试用例2
String s = "(?abcd.efgdf) (?xcv.qwer)";
String[] arr = Arrays.asList(s.split("\\(|\\.|\\)\\s*\\(|\\)\\??")).stream().filter(str -> !str.isEmpty()).collect(Collectors.toList()).toArray(new String[0]);
for (String a: arr) System.out.println(a);
输出
?abcd
efgdf
?xcv
qwer
关于java - 如何分离字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42596588/