私は次の文字列を持っています:
String n = "(.........)(......)(.......)(......) etc"
との間List<String>
のすべての部分文字列でを埋めるメソッドを書きたいと思います。前もって感謝します!n
(
)
これは1行で実行できます。
String[] parts = input.replaceAll("(^.*\\()|(\\).*$)", "").split("\\)\\(");
replaceAll()
リースブラケットと末尾のブラケット(およびそれらの最初/最後のブラケットの前後にある他のジャンク文字)を削除するための呼び出しはsplit()
、ブラケットのペアだけになります。
私は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);
}
}
(...)ペアがネストされていない場合は、Javaで正規表現を使用できます。java.util.regex.Patternクラスを見てください。
この正規表現バージョンを作成しましたが、少し時間がかかります。私はそれが改善される可能性があると確信しています。(注:「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
}
これは機能するはずです:
String in = "(bla)(die)(foo)";
in = in .substring(1,in.length()-1);
String[] out = in .split(Pattern.quote(")("));