簡體   English   中英

如何將“ key1:value1,value,key2:value3”字符串解析為ArrayLists?

[英]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;

標簽是冒號前面的單詞(在我的示例中: abcdefijkmno )。 那是我想要的

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:rstpythex上進行測試。 結果是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM