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

文字列分割でそれを実行したい場合は、のような巨大な正規表現\s+|((?<=\()|(?=\())|((?<=\))|(?=\)))はかなり避けられません。この正規表現は、この質問に基づいていますが、ほとんど機能します。

最も簡単な方法は、@ acerisaraによって提案されているように括弧をスペースで囲むか、@user1030723によって提案されているようにStringTokenizerを使用することです。

于 2012-10-08T08:54:58.047 に答える
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 に答える