如何使用split()分割线

时间:2019-05-01 19:01:21

标签: java regex split readline

help !!我要像下面的示例一样将一行分成一组

http://data.doremus.org/performance/aa692091-a77c-3ef4-ba47-e1f9596d7b0c”,“ Solistes d'aujourd'hui,de solistes demain-Festival deJérusalem,Elena Bashkirova”,2009-01-09

int i=0;
while ((CurrentLine = reader1.readLine()) != null) {

  String[] tokens = CurrentLine.split("\",");

  fichier1[i][0] =tokens[tokens.length-1].split("T"[0];//date

  fichier1[i][1] =tokens[tokens.length-2];//titre

  fichier1[i][2] =tokens[tokens.length-3];//URI
  i++;
}

我使用了上面的代码,只是元素2(标题)本身包含逗号,这是错误的

1 个答案:

答案 0 :(得分:4)

这看起来像逗号分隔值数据,那么为什么不使用CSV解析器呢?使用http://opencsv.sourceforge.net/,您的代码如下所示:

String data = "\"http://data.doremus.org/performance/aa692091-a77c-3ef4-ba47-e1f9596d7b0c\",\"Solistes d'aujourd'hui, solistes de demain - Festival de Jérusalem, Elena Bashkirova\",2009-01-09";
CSVParser parser = new CSVParserBuilder().build();
String[] tokens = parser.parseLine(data);
for (String token : tokens){
    System.out.println("token = "+token);
}

输出:

token = http://data.doremus.org/performance/aa692091-a77c-3ef4-ba47-e1f9596d7b0c
token = Solistes d'aujourd'hui, solistes de demain - Festival de Jérusalem, Elena Bashkirova
token = 2009-01-09

如果您不想使用外部库,在这种情况下,最简单的解决方案之一是 ,而不是寻找分割位置,而是寻找您感兴趣的部分,例如

  • 引号之间的文本,
  • 引号外的非逗号序列。

例如:

String data = "\"http://data.doremus.org/performance/aa692091-a77c-3ef4-ba47-e1f9596d7b0c\",\"Solistes d'aujourd'hui, solistes de demain - Festival de Jérusalem, Elena Bashkirova\",2009-01-09";
Pattern p = Pattern.compile("\"[^\"]+\"|[^,]+");
Matcher m = p.matcher(data);
while(m.find()){
    System.out.println("token = "+m.group());
}

输出:

token = "http://data.doremus.org/performance/aa692091-a77c-3ef4-ba47-e1f9596d7b0c"
token = "Solistes d'aujourd'hui, solistes de demain - Festival de Jérusalem, Elena Bashkirova"
token = 2009-01-09