将字符串拆分为 java 中的部分以将其放入映射中
Split string into parts in java to put it in a map
我一直在尝试从一个字符串中获取所有值,并按照以下方式将它们放入映射中:
所以我有一个像这样的字符串:
String cookies = "i=lol;haha=noice;df3=ddtb;"
到目前为止我一直在尝试这个:
final Map<String, String> map = new HashMap<>();
map.put(cookies.split(";")[0].split("=")[0], cookies.split(";")[0].split("=")[1]);
但是这样我只能输入一个值,而且又长又丑。是否有任何是由于正则表达式或循环造成的?
您可以使用循环遍历键值对并将它们放入映射中:
String[] cookieArr = cookies.split(";");
for(String cookieString : cookieArr){
String[] pair = cookieString.split("=");
if(pair.length < 2){
continue;
}
map.put(pair[0], pair[1]);
}
如果 cookie 字符串格式错误,if 仅用于防止 ArrayIndexOutOfBounds 异常
另一种选择是使用流:
Arrays.stream(cookies.split(";")).forEach(cookieStr -> map.put(cookieStr.split("=")[0], cookieStr.split("=")[1]));
正如@WJS 在评论中提到的,您可以使用 map.putIfAbsent(key, vlaue)
instead of map.put(key, value)
来防止覆盖值。但在 cookie 的情况下,用新值覆盖旧值可能是一种理想的行为。
你可以这样做。它假定您的格式是一致的。
- 首先在“;”
上拆分每个 k/v 对
- 将“=”拆分为键和值。
- 并添加到地图。
- 如果出现重复键,则第一个遇到的键优先(如果您想要重复键的最新值,则使用
(a, b)-> b
作为合并 lambda。)
String cookies = "i=lol;haha=noice;df3=ddtb";
Map<String, String> map = Arrays.stream(cookies.split(";"))
.map(str -> str.split("=")).collect(Collectors
.toMap(a -> a[0], a->a[1], (a, b) -> a));
map.entrySet().forEach(System.out::println);
版画
df3=ddtb
haha=noice
i=lol
我一直在尝试从一个字符串中获取所有值,并按照以下方式将它们放入映射中:
所以我有一个像这样的字符串:
String cookies = "i=lol;haha=noice;df3=ddtb;"
到目前为止我一直在尝试这个:
final Map<String, String> map = new HashMap<>();
map.put(cookies.split(";")[0].split("=")[0], cookies.split(";")[0].split("=")[1]);
但是这样我只能输入一个值,而且又长又丑。是否有任何是由于正则表达式或循环造成的?
您可以使用循环遍历键值对并将它们放入映射中:
String[] cookieArr = cookies.split(";");
for(String cookieString : cookieArr){
String[] pair = cookieString.split("=");
if(pair.length < 2){
continue;
}
map.put(pair[0], pair[1]);
}
如果 cookie 字符串格式错误,if 仅用于防止 ArrayIndexOutOfBounds 异常
另一种选择是使用流:
Arrays.stream(cookies.split(";")).forEach(cookieStr -> map.put(cookieStr.split("=")[0], cookieStr.split("=")[1]));
正如@WJS 在评论中提到的,您可以使用 map.putIfAbsent(key, vlaue)
instead of map.put(key, value)
来防止覆盖值。但在 cookie 的情况下,用新值覆盖旧值可能是一种理想的行为。
你可以这样做。它假定您的格式是一致的。
- 首先在“;” 上拆分每个 k/v 对
- 将“=”拆分为键和值。
- 并添加到地图。
- 如果出现重复键,则第一个遇到的键优先(如果您想要重复键的最新值,则使用
(a, b)-> b
作为合并 lambda。)
String cookies = "i=lol;haha=noice;df3=ddtb";
Map<String, String> map = Arrays.stream(cookies.split(";"))
.map(str -> str.split("=")).collect(Collectors
.toMap(a -> a[0], a->a[1], (a, b) -> a));
map.entrySet().forEach(System.out::println);
版画
df3=ddtb
haha=noice
i=lol