![](/img/trans.png)
[英]Java How To Parse String With Pattern [key1]value1[key2]value2[key3]value3
[英]How can I parse a “key1:value1, value, key2:value3” string into ArrayLists?
我有一個弦
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");
請注意,值中可以包含空格和逗號 ,而不僅僅是一個單詞。
由於您的值可以包含逗號,因此在找到key
時需要拆分。
甲key
被定義為前一單詞:
。
因此,您的拆分模式將為", (?=[a-zA-z]+:)"
這將檢查指定順序的comma space chars colon
,並向前看chars和冒號。
檢查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]);
}
我會使用正則表達式。 我不確定如何在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中
首先從文件中獲取您的字符串
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[]
將執行由第一分好,
。
您得到的行是字符串。
//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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.