我有一个字符串
String line = "abc:xyz uvw, def:ghi, mno:rst, ijk:efg, abc opq";
我想将这个字符串解析为两个列表:
ArrayList<String> tags;
ArrayList<String> values;
其中标签是冒号前的单词(在我的示例中为abc
,def
,ijk
和mno
)。那是我想要的
tags = Arrays.asList("abc", "def", "mno", "ijk");
values = Arrays.asList("xyz uvw", "ghi", "rst", "efg, abc opq");
请注意,这些值可以包含空格和逗号,而不只是一个单词。
答案 0 :(得分:2)
由于您的值可以包含逗号,因此您需要在找到key
时拆分。
key
被定义为:
之前的单词。
因此,您的拆分模式为", (?=[a-zA-z]+:)"
这将按指定的顺序检查comma space chars colon
,查看字符和冒号。
检查key
,并使用预测进行拆分(从而保持密钥完好无损)。这将为您提供一组keyValue对
然后您可以使用:
进行拆分以获取密钥和值。
String str = "Your string";
String[] keyValuePairs = str.split(", (?=[a-zA-z]+:)");
for (String keyValuePair : keyValuePairs) {
String[] keyvalue = keyValuePair.split(":");
keysArray.add(keyvalue[0]);
valuesArray.add(keyvalue[1]);
}
答案 1 :(得分:2)
我会选择正则表达式。我不知道如何在Java中执行此操作,但在python中这将是:
(\w+):([ ,\w]+)(,|$)
使用输入abc:xy z uvw, def:g,hi, mno:rst
在pythex上进行了测试。结果是:
Match 1
1. abc
2. xy z uvw
3. ,
Match 2
1. def
2. g,hi
3. ,
Match 3
1. mno
2. rst
3. Empty
因此,对于每个匹配,您将获得位置1中的键和2中的值。分隔符存储在3
中答案 2 :(得分:1)
首先从文件中获取字符串
List<String> tags = new ArrayList<String>();
List<String> values = new ArrayList<String>;
String lineThatWasRead = ...
然后我们用逗号分隔它来获得对,并且每个pari分割为:
List<String> separatedStringList = Arrays.asList(lineThatWasRead.split(","));
for (String str : separatedStringList)
{
//Since it is possible values also contain commas, we have to check
//if the current string is a new pair of tag:value or just adding to the previous value
if (!str.contains(":"))
{
if (values.size > 0)
{
values.set(values.size() - 1, values.get(values.size()-1) + ", " + str);
continue; //And go to next str since this one will not have new keys
}
}
String[] keyValArray = str.split(:);
String key = keyValArray[0];
String val = keyValArray[1];
tags.add(key);
values.add(val);
}
请注意,您不必使用列表,但我只是喜欢它们提供的灵活性。有些人可能认为String[]
对,
的第一次拆分效果会更好。
答案 3 :(得分:-1)
你的行为字符串。
//your code here
String line = //your code here
String[] stuff = line.split(":")// this will split your line by ":" symbol.
stuff[0] //this is your key
stuff[1] //this is your value