如何分隔一串(?abcd.efgdf)?
我想得到的是"?abcd" 和" efgdf" 分开并转移到另一个字符串容器
我知道使用split("。"),但如果有两个这样的字符串怎么办呢。 恩。 (?abcd.efgdf)(?xcv.qwer)拆分第二个字符串包含第一个字符串的结尾,即" efgdf" 。所以使用split("。")不是一种选择。
是否存在分离此字符串的任何实现?
答案 0 :(得分:0)
您可以将String
与两个分隔符与point
和space
分开,如下所示:
String [] spl = "(?abcd.efgdf) (?xcv.qwer)".split("\\.| ");
//---------------------------------------------------^-^--
所以你会得到:
(?abcd
efgdf)
(?xcv
qwer)
如果您获得str = "(?abcd.efgdf)"
:
(?abcd
efgdf)
答案 1 :(得分:0)
您可以使用正则表达式\(|\.|\)\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
答案 2 :(得分:0)
你应该看看java.util.Pattern 这将帮助您解析您正在寻找的那些模式的整个字符串。
Pattern p = Pattern.compile("\((\?\w*)\.(\w*)\)");
Matcher m = p.matcher("(?abcd.efgdf) (?xcv.qwer)");
while (m.find()) {
list1.add(m.group(1));
list2.add(m.group(2));
}
正则表达式起初可能看起来令人生畏,但对于更复杂的情况来说非常值得。通读JavaDoc of Pattern来了解可能性。他们将帮助你的例子,因为他们会为你摆脱所有的空间和括号,所以你只需要你想要的东西,而不是它们之间的东西。此外,这适用于包含任意数量的(?abcd.abcd)
组的字符串。