Shi*_*dar 1 java split hashmap
我一直在尝试从字符串中获取所有值,并按以下方式将它们放入映射中:
所以我有一个像这样的字符串:
String cookies = "i=lol;haha=noice;df3=ddtb;"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在尝试这个:
final Map<String, String> map = new HashMap<>();
map.put(cookies.split(";")[0].split("=")[0], cookies.split(";")[0].split("=")[1]);
Run Code Online (Sandbox Code Playgroud)
但是这样我只能输入一个值,而且它很长很丑。有没有用正则表达式或循环来解决这个问题?
您可以使用循环遍历键值对并将它们放入地图中:
String[] cookieArr = cookies.split(";");
for(String cookieString : cookieArr){
String[] pair = cookieString.split("=");
if(pair.length < 2){
continue;
}
map.put(pair[0], pair[1]);
}
Run Code Online (Sandbox Code Playgroud)
如果 cookie 字符串格式错误,则 if 仅用于防止 ArrayIndexOutOfBounds expcetions
另一种方法是使用流:
Arrays.stream(cookies.split(";")).forEach(cookieStr -> map.put(cookieStr.split("=")[0], cookieStr.split("=")[1]));
Run Code Online (Sandbox Code Playgroud)
正如@WJS 在评论中提到的,您可以使用map.putIfAbsent(key, vlaue)代替map.put(key, value)来防止覆盖值。但是对于 cookie,用新值覆盖旧值可能是一种理想的行为。