1

我有一行纯文本,其中包含一系列由加号分隔的标签:

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

数据字段总是以相同的顺序出现:名称、位置、标签。名称和位置始终只有一个实例,但可以有一个或多个标签。我希望能够在 Java 中复制.NET StringSplit方法(将所有分隔字符串写入数组),但似乎无法解决这个问题。

我对上面示例中的标记字段的期望输出是:

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

首先,我能找到的最接近的方法是split使用正则表达式。但我不确定如何将正则表达式编码为从数组中排除第一个 +之前的任何字符。

+我想在特定行中获取计数并使用 for 循环来解析和创建 ,但是这会在一行 tagString[count-of-plusses]中遍历多个实例吗?+nnnnn

关于解决这个问题的好方法有什么建议吗?

4

7 回答 7

2

如果您专门查看String的 javadoc :

public String[] split(String regex)

这将允许您围绕您喜欢的任何内容拆分一个字符串并返回一个字符串数组。

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

于 2012-07-13T15:35:56.247 回答
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)。

于 2012-07-13T15:37:37.750 回答
0
input.split(" +")[1]     // you have "tag1 +tag2 +tag3 +tag4" now
     .split("\\s+\\+");  // you have {tag1, tag2, tag3, tag4} now
于 2012-07-13T15:43:29.803 回答
0

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

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

于 2012-07-13T15:35:37.907 回答
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("+", "");
}
于 2012-07-14T11:39:40.813 回答
0

如果您不想使用正则表达式,请尝试http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

于 2012-07-13T15:39:19.833 回答
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]
于 2012-07-13T15:40:16.730 回答