在java中将字符串拆分为多个部分以将其放入地图中

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)

但是这样我只能输入一个值,而且它很长很丑。有没有用正则表达式或循环来解决这个问题?

Jar*_*sto 7

您可以使用循环遍历键值对并将它们放入地图中:

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,用新值覆盖旧值可能是一种理想的行为。