4

私はJavaの初心者です。次の文字列の分割を実装する簡単で効率的な方法があるかどうかを知りたいです。パターンとマッチャーを試してみましたが、思い通りにはなりません。

"{1,24,5,[8,5,9],7,[0,1]}"

次のように分割されます。

1 
24
5
[8,5,9]
7
[0,1]

これは完全に間違ったコードですが、とにかく投稿しています:

    String str = "{1,24,5,[8,5,9],7,[0,1]}";
    str= str.replaceAll("\\{", "");
    str= str.replaceAll("}", "");
    Pattern pattern = Pattern.compile("\\[(.*?)\\]");
    Matcher matcher = pattern.matcher(str);
    String[] test = new String[10];
   // String[] _test = new String[10];
    int i = 0;
    String[] split = str.split(",");

    while (matcher.find()) {


        test[i] = matcher.group(0);
        String[] split1 = matcher.group(0).split(",");


      // System.out.println(split1[i]);
           for (int j = 0; j < split.length; j++) {
             if(!split[j].equals(test[j])&&((!split[j].contains("\\["))||!split[j].contains("\\]"))){
              System.out.println(split[j]);
             }

        }
        i++;


    }

}

指定された文字列形式で、{a,b,[c,d,e],...} 形式としましょう。すべての内容を登録したいのですが、角括弧内のものは 1 つの要素 (配列など) として示されます。

4

1 に答える 1

6

これは機能します:

  public static void main(String[] args)
  {
     customSplit("{1,24,5,[8,5,9],7,[0,1]}");
  }


  static void customSplit(String str){
     Pattern pattern = Pattern.compile("[0-9]+|\\[.*?\\]");
     Matcher matcher =
           pattern.matcher(str);
     while (matcher.find()) {
        System.out.println(matcher.group());
     }
  }

出力を生成します

1
24
5
[8,5,9]
7
[0,1]
于 2013-06-24T13:53:07.527 に答える