-2

私は次の文字列を持っています:

String n = "(.........)(......)(.......)(......) etc"

との間List<String>のすべての部分文字列でを埋めるメソッドを書きたいと思います。前もって感謝します!n()

4

5 に答える 5

5

これは1行で実行できます。

String[] parts = input.replaceAll("(^.*\\()|(\\).*$)", "").split("\\)\\(");

replaceAll()リースブラケットと末尾のブラケット(およびそれらの最初/最後のブラケットの前後にある他のジャンク文字)を削除するための呼び出しはsplit()、ブラケットのペアだけになります。

于 2012-12-18T22:01:15.457 に答える
2

私はStringメソッドにあまり詳しくないので、自分でコーディングせずに、いくつかの凝ったメソッドを使用するだけで実行できる方法があると確信していますが、ここで説明します。

テスト済み、100%完璧に動作します:)

String string = "(stack)(over)(flow)";
ArrayList<String> subStrings = new ArrayList<String>();
for(int c = 0; c < string.length(); c++) {
    if(string.charAt(c) == '(') {
        c++;
        String newString = "";
        for(;c < string.length() && string.charAt(c) != ')'; c++) {
            newString += string.charAt(c);
        }
        subStrings.add(newString);
    }
}
于 2012-12-18T22:00:29.697 に答える
1

(...)ペアがネストされていない場合は、Javaで正規表現を使用できます。java.util.regex.Patternクラスを見てください。

于 2012-12-18T22:01:36.457 に答える
1

この正規表現バージョンを作成しましたが、少し時間がかかります。私はそれが改善される可能性があると確信しています。(注:「n」は入力文字列です)

    Pattern p = Pattern.compile("\\((.*?)\\)");
    Matcher matcher = p.matcher(n);
    List<String> list = new ArrayList<String>();
    while (matcher.find())
    {
        list.add(matcher.group(1));  // 1 == stuff between the ()'s
    }
于 2012-12-18T22:20:11.253 に答える
0

これは機能するはずです:

    String in = "(bla)(die)(foo)";
    in = in .substring(1,in.length()-1);
    String[] out = in .split(Pattern.quote(")("));
于 2012-12-18T22:04:32.737 に答える