如何在Java中的MAP中以键值的形式按空间和存储的形式将字符串拆分



我有一串由形式空间隔开的参数组成:

Reference=R1,R2 GroupId=G01 Date=12/02/2017 15:25.

我需要以" ="令牌的左手侧为键,而右侧的左侧是将存储在地图中的值。例如

Key         Value
Reference    R1,R2
GroupId      G01
Date         12/02/2017 15.25

我确实尝试使用string.split("(尝试拆分字符串,但是日期参数在日期和时间之间有一个空间,这会干扰安排。

s+(?=[^=]+=)

这说要在任何数量的空格上分开,然后立即进行键加=。请注意,此拆分除了分离空格以外的任何其他内容,以值完整的键。

Map<String, String> map = new HashMap<>();
String input = "Reference=R1,R2 GroupId=G01 Date=12/02/2017 15:25";
String[] parts = input.split("\s+(?=[^=]+=)");
for (String part : parts) {
    map.put(part.split("=")[0], part.split("=")[1]);
    System.out.println(part);
}

此输出:

Reference=R1,R2
GroupId=G01
Date=12/02/2017 15:25

我没有明确测试的唯一额外步骤是用键和值生成地图。

此解决方案您可以尝试

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SplitTest {
public static void main(String[] args) {
    String str="Reference=R1,R2 GroupId=G01 Date=12/02/2017 15:25 GroupId2=G02 Date=12/02/2017 30:25 Date=12/02/2017 30:25 Date=12/02/2017 30:25 GroupId3=G03";
    String[] split = str.split(" ");
    List<String> asList = Arrays.asList(split);
    List<String> newList = new ArrayList<>();
    for (int i = 0; i < asList.size();) {
        if(asList.get(i).toString().startsWith("Date")){
            String str1 = asList.get(i);
            String str2 = asList.get(i+1);
            newList.add(str1+" "+str2);
            i=i+2;
        }else{
            newList.add(asList.get(i));
            ++i;
        }
    }
    System.out.println(newList.toArray());
}

}

输出

Reference=R1,R2
GroupId=G01 
Date=12/02/2017 15:25 
GroupId2=G02
Date=12/02/2017 30:25 
Date=12/02/2017 30:25 
Date=12/02/2017 30:25 
GroupId3=G03

最新更新