如何将字符串按space拆分并以键值的形式存储在Java的map中?
How to Split a string by space and store in form of key value in map in Java?
我有一个由 space 分隔的参数组成的字符串,格式为:
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(" ") 拆分字符串,但日期参数在日期和时间之间有一个 space,这会扰乱排列。
我们可以尝试按照以下正则表达式模式拆分:
\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
我有一个由 space 分隔的参数组成的字符串,格式为:
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(" ") 拆分字符串,但日期参数在日期和时间之间有一个 space,这会扰乱排列。
我们可以尝试按照以下正则表达式模式拆分:
\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