2012-07-13 39 views
0

我有一个行的纯文本,它包含了一系列的加号分隔标签:在Java中,如何将单个字段的多个值解析为String数组?

event name @location +tag1 +tag2 +tag3 +tag4

的数据字段送花儿给人sappear以相同的顺序:名称,位置,标签。总是只有一个名称和位置的实例,但可以有一个或多个标签。我希望能够复制Java中的.NET StringSplit方法(将所有分隔字符串写入数组),但似乎无法绕过我的头。

从上面的例子中为标签字段我所需的输出将是:

tag[0] = tag1 
tag[1] = tag2 
tag[2] = tag3 
tag[3] = tag4 

首先,我能找到最接近的方法是split其使用正则表达式。但我不知道如何将正则表达式编码到EXCLUDE中的任何字符第一+。

我想在特定行中获得+的计数,并使用for循环来解析并创建tagString[count-of-plusses],但是会在单行上跨多个+nnnnn实例吗?

任何建议在一个很好的方法来解决这个问题?

回答

1

如果你看的javadoc为String明确:

public String[] split(String regex) 

这将允许您分割周围任何你喜欢的字符串,并返回一个字符串数组。

您也可以将此方法的版本与limit参数一起使用。首先使用它可以让你摆脱所有的东西,然后在没有limit参数的情况下再次执行。

0

使用String方法indexOf()和subString()来获取字符串的相关部分,即丢弃第一个+之前的所有内容。

然后使用split()以+作为分隔符和trim()放弃空格来处理此子字符串。

2

您可以分割字符串,并返回数组复制,而不第一个项目:

String s ="event name @location +tag1 +tag2 +tag3 + 
String[] items = s.split("\\+"); 

//remove the `event name @location` part 
String[] tags = new String[items.length - 1]; 
System.arraycopy(items, 1, tags, 0, items.length - 1); 

请务必添加相关的完整性检查(项目是> 1,例如长度)。

0

摆脱第一个+之前的字符只是忽略数组中的第一个项目。

String input = "+tag1+tag2+tag3+tag4"; 
    String[] splitted = input.split("\\+");  
    System.out.println(Arrays.toString(splitted)); 
    //returns [, tag1, tag2, tag3, tag4] 

    input = "xxx+tag1+tag2+tag3+tag4"; 
    splitted = input.split("\\+");  
    System.out.println(Arrays.toString(splitted)); 
    //returns [xxx, tag1, tag2, tag3, tag4] 
0
input.split(" +")[1]  // you have "tag1 +tag2 +tag3 +tag4" now 
    .split("\\s+\\+"); // you have {tag1, tag2, tag3, tag4} now 
+1

这是很难添加与语法检查(即,你会得到一个IndexOutOfBoundsException异常,如果没有'“+”'在原始字符串)。 – assylias 2012-07-13 15:58:46

+0

Hmz,你是对的:D – Lopina 2012-07-13 16:03:13

0

托盘这个

 String string = "event name @location +tag1 +tag2 +tag3 +tag4";       
     String[] ss = string.split(" "); 
     String[] tag = new String[ss.length - 3]; 
     for (int i = 3 ; i < ss.length; i++) { 
      tag[i-3] = ss[i].replace("+", ""); 
     } 
相关问题