2

我有一个String

String testString = "IN NEWYORK AND (OUT FLORIDA)" ; 

我想在数组中拆分这个字符串:

String testArray[] = testString.split("\\s()");

我希望结果是:

testArray[0] = "IN";
testArray[1] = "NEWYORK";
testArray[2] = "AND";
testArray[3] = "(";
testArray[4] = "OUT";
testArray[5] = "FLORIDA";
testArray[6] = ")";

但是,我得到的输出是:

testArray[0] = "IN";
testArray[1] = "NEWYORK";
testArray[2] = "AND";
testArray[3] = "(OUT";
testArray[4] = "FLORIDA)";

它在空格上拆分,但不在 "(" 和 ")" 上,我希望 "(" 和 ")" 作为单独的字符串。

4

4 回答 4

3

试试下面的:

String testArray[] = testString.split("\\s|(?<=\\()|(?=\\))");
于 2012-10-08T08:46:21.770 回答
1

split() 需要删除分隔符。使用 StringTokenizer 并指示它保留分隔符。

    StringTokenizer st = new StringTokenizer("IN NEWYORK AND (OUT FLORIDA)", " ()", true);
    while (st.hasMoreTokens()) {
        String t = st.nextToken();
        if (!t.trim().equals("")) {
            System.out.println(t);
        }
    }
于 2012-10-08T08:50:50.907 回答
0
String test = "IN NEWYORK AND (OUT FLORIDA)";
// this can for sure be done better, hope you get the idea
String a = test.replaceAll("(", "( ");
String b = a.replaceAll(")", " )";

String array[] = b.split("\\s");
于 2012-10-08T08:45:19.163 回答
0

如果你想用字符串拆分来做到这一点,那么可怕的正则表达式\s+|((?<=\()|(?=\())|((?<=\))|(?=\)))几乎是不可避免的。这个正则表达式基于这个问题,顺便说一句,它几乎可以工作。

最简单的方法是按照@acerisara 的建议用空格包围括号,或者按照@user1030723 的建议使用StringTokenizer

于 2012-10-08T08:54:58.047 回答