StringTokenizer中的连续分隔符

时间:2010-12-10 09:36:41

标签: java string stringtokenizer

我必须标记以下字符串

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

如何使代码按预期工作?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

好的,看到还没有答案,我的“快速修复”如下:

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:{内容2:[{XYZ,ABC,{content3:[{AA,BB