0

次の文字列をトークン化する必要があります

12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}]

上記の文字列に}]が含まれている場合は、結果的に分割する必要があります。だから私はした、

    String[] tokens = null;
StringTokenizer csvToken = new StringTokenizer(csvString,"]}");
tokens = new String[csvToken.countTokens()];
int tmp = 0;
while(csvToken.hasMoreTokens()) {
    tokens[tmp++] = csvToken.nextToken();
}

しかし、期待どおりにトークン化されていません。

12/12/2010:{content1:[{xyz,abc
,13/12/2010:{content2:[{xyz,abc
,{content3:[{aa,bb

しかし、私が期待していたのは、

12/12/2010:{content1:[{xyz,abc
,13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb

コードを期待どおりに動作させるにはどうすればよいですか?

4

2 に答える 2

3

String.split(String regex) はどうですか?

String toDo = "12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}]";
String[] splitted = toDo.split("\\}\\]");
for (String s : splitted) {
    System.out.println(s);
}
于 2010-12-10T09:42:36.873 に答える
1

OK、まだ答えがないので、私の「クイックフィックス」は次のとおりです。

import java.util.StringTokenizer;

public class Test {

 public static void main(String[] args) {
  String csvString = "12/12/2010:{content1:[{xyz,abc}],13/12/2010:{content2:[{xyz,abc},{content3:[{aa,bb}]}]";

  String[] tokens = null;
  StringTokenizer csvToken = new StringTokenizer(csvString,"]}");
  tokens = new String[csvToken.countTokens() - 1];
  int tmp = 0;
  while(csvToken.hasMoreTokens()) {
   tokens[tmp++] = csvToken.nextToken();
   if (tmp == tokens.length) {
    tokens[tmp - 1]  += csvToken.nextToken();
   }
  }

  for (String token : tokens) {
   System.out.println(token);
  }

 }
}

個人的には、 String.split()メソッドを使用し、上記のソリューションの「アイデア」を使用します。または、勇気がある場合は、正規表現を使用してください。

PSコードがテストされ、機能しました....

出力:

12/12/2010:{content1:[{xyz,abc
,13/12/2010:{content2:[{xyz,abc,{content3:[{aa,bb

于 2010-12-10T09:45:32.323 に答える