将字符串拆分为 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