如何分离String

时间:2017-03-04 13:28:24

标签: java arrays string arraylist

如何分隔一串(?abcd.efgdf)?

我想得到的是"?abcd" " efgdf" 分开并转移到另一个字符串容器

我知道使用split("。"),但如果有两个这样的字符串怎么办呢。 恩。 (?abcd.efgdf)(?xcv.qwer)拆分第二个字符串包含第一个字符串的结尾,即" efgdf" 。所以使用split("。")不是一种选择。

是否存在分离此字符串的任何实现?

3 个答案:

答案 0 :(得分:0)

您可以将String两个分隔符pointspace分开,如下所示:

String [] spl = "(?abcd.efgdf) (?xcv.qwer)".split("\\.| ");
//---------------------------------------------------^-^--

所以你会得到:

(?abcd
efgdf)
(?xcv
qwer)

如果您获得str = "(?abcd.efgdf)"

(?abcd
efgdf)

答案 1 :(得分:0)

您可以使用正则表达式\(|\.|\)\s*\(|\)\??

DEMO

它包括所有这些分隔符:

  1. (第一个开放式括号
  2. .一段时间
  3. )\s*(括号之间的可选空格 s
  4. )结束括号
  5. ?第4点后面的可选问号
  6. 但是它可能会创建一些空字符串,所以使用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)组的字符串。