0

そのようにフォーマットされた文字列があります

[dgdds,dfse][fsefsf,sefs][fsfs,fsef]

Regex を使用してこれをすばやく解析し、各値に 1 つの「エントリ」を含む ArrayList を返すにはどうすればよいでしょうか?

ArrayList <String>:

0(String): [dgdds,dfse]

1(String): [fsefsf,sefs]

2(String): [fsfs,fsef]

本当にこれで立ち往生しています、どんな助けでも素晴らしいでしょう。

4

7 に答える 7

3

どうですか

String myData = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
List<String> list = new ArrayList<>(Arrays.asList(myData
        .split("(?<=\\])")));

for (String s : list)
    System.out.println(s);

出力:

[dgdds,dfse]
[fsefsf,sefs]
[fsfs,fsef]

この正規表現は、後読みメカニズムを使用して、 の後の各場所で分割し]ます。

于 2013-11-06T22:15:43.300 に答える
3

この正規表現を試してください:
Pattern pattern = Pattern.compile("\\[\\w*,\\w*\\]");

于 2013-11-06T22:18:16.777 に答える
2

古い、簡単、素晴らしい方法:)

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
        String[] token = s.split("]");
        for (String string : token) {
            System.out.println(string + "]");
        }
于 2013-11-06T22:21:44.247 に答える
1

これを使用した分割(?:(?<=\])|^)(?=\[)は、間に何もない場合に機能する可能性があります][

于 2013-11-06T23:15:06.690 に答える
1

: をsplit(regex)エスケープして関数を直接 使用し、それをパターン マッチングの として使用できます。"]""\\]"regex

String str = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
     String bal[] = str.split("\\]");

     ArrayList<String>finalList = new ArrayList<>();

     for(String s:bal)
     {
         finalList.add(s+"]");
     }
     System.out.println(finalList);
于 2013-11-06T22:25:22.247 に答える
1

次の 2 つのパスで行う必要がある場合があります。

(1)それが単なる1D配列の場合は括弧で分割します(質問では明確ではありません):

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
String[] sArray = s.split("\\[|\\]\\[|\\]");

(2)分割も行いたい場合は、カンマで分割します。たとえば、「dgdds,dfse」とします。

sArray[i].split(",");
于 2013-11-06T22:16:47.627 に答える
1

単純な\[.*?\]正規表現を使用できます。つまり、 で始まり[、その後に 0 個以上の文字 (ただし、貪欲にではなく、できるだけ短く、?inの理由.*?) で終わる文字列に一致します]

これは機能します。 Ideoneでテストできます。

List<String> result = new ArrayList<String>();
String input = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]";
Pattern pattern = Pattern.compile("\\[.*?\\]");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) 
{
    result.add(matcher.group());
}
System.out.println(result);

出力:

[[dgdds,dfse], [fsefsf,sefs], [fsfs,fsef]]
于 2013-11-06T22:18:40.693 に答える