Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java语言将字符串解析成hashmap_Java_String_Dictionary_Hashmap - Fatal编程技术网

如何使用java语言将字符串解析成hashmap

如何使用java语言将字符串解析成hashmap,java,string,dictionary,hashmap,Java,String,Dictionary,Hashmap,我有一个字符串,但无法将其解析为映射 string s=“sakib hasan:3:sumon ali:4:tutul:100 我需要从上面的字符串创建一个HashMap。sakib hasan、sumon ali、tutul、shila akter应该是HashMap的键,3,4100,1,应该是键的值 我已经尝试了流动代码,但无法解决问题 Map<String, Integer>amap=new HashMap<String,Integer>(); String[

我有一个字符串,但无法将其解析为映射

string s=“sakib hasan:3:sumon ali:4:tutul:100

我需要从上面的字符串创建一个
HashMap
sakib hasan、sumon ali、tutul、shila akter
应该是
HashMap
的键,
3,4100,1,
应该是
键的

我已经尝试了流动代码,但无法解决问题

Map<String, Integer>amap=new HashMap<String,Integer>(); 
String[] splt=s.split(":");
for (String string : splt)  
{ 
  String[] pair=string.split(" ");
  amap.put(pair[0])+Integer.parseInt(pair[1]);  
}
Mapamap=newhashmap();
字符串[]splt=s.split(“:”);
用于(字符串:splt)
{ 
String[]pair=String.split(“”);
amap.put(对[0])+Integer.parseInt(对[1]);
}
有没有办法不用硬编码就可以做到这一点

试试这个。 您在“:”上的拆分将分别返回每个项目

然后,您只需将每个组作为两个组的集合,您可以在for循环中使用
i+=2

Map < String, Integer > amap = new HashMap < String, Integer > ();
String[] splt = s.split(" : ");
for (int i = 0; i < splt.length; i += 2) {
    amap.put(splt[i],Integer.parseInt(splt[i + 1]));
}
Mapamap=newhashmap();
字符串[]splt=s.split(“:”);
对于(int i=0;i
在您的代码中,for循环将遍历您拆分的每个元素,每次都添加hashmap only索引0和1。您需要增加索引

    String s = "sakib hasan : 3 : sumon ali : 4 : tutul : 100 : shila akter : 1";

    Map<String, Integer> amap = new HashMap<String, Integer>();
    String[] splt = s.split(":");
    for(int i = 1; i < splt.length;i+=2)
        amap.put(splt[i-1].trim(), Integer.parseInt(splt[i].trim()));
String s=“sakib hasan:3:sumon ali:4:tutul:100:shila akter:1”;
Map amap=newhashmap();
字符串[]splt=s.split(“:”);
对于(int i=1;i
这里有一个类似的解决方案,它使用流而不是for循环:

IntStream.range(0, splt.length / 2)
    .forEach(i -> map.put(splt[i], Integer.parseInt(splt[i + 1]));

或者您可以将.forEach转换为创建地图的收集器。

至少,我得到了答案

Map<String, Integer>amap=new HashMap<String,Integer>(); 
String[] splt=s.split(":");
try {
    for (int i = 0; i <= pair.length; i +=2) {
    amap.put(pair[i].trim(), Integer.parseInt(pair[(1 + i)].trim()));
}
} catch (Exception e) {

}
Mapamap=newhashmap();
字符串[]splt=s.split(“:”);
试一试{

对于(int i=0;i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i
values感谢您提到@DrewKennedy我在回答中修复了它,现在应该可以编译了,没有问题。另一种方法是在“:”处拆分(填充冒号)。:)尝试使用调试器并单步执行代码。您将能够在每次迭代中看到
string
的值,这将帮助您解决此问题以及将来可能遇到的其他问题。通过这种方式,从1开始,这将确保在以下情况下,不会在最后一个oddball元素上调用put方法:出于某种原因,它是一个奇数的元素。此外,在冒号处进行拆分并稍后进行修剪可以确保如果字符串的分隔符为“quot”或类似的值,而不是“:",它不会在这个问题上出错。我有一个问题要问你,如果它是我从文件中读取的两行或多行字符串,那么会发生什么。例如,文件中的字符串存储一行-->sakib hasan:3:sumon ali:4:tutul:,secondline..>100:shila akter:1这两个实现中都会有问题,你必须选择concatena将字符串放在手边,或者在读取下一行时调用中间行。但是,如果您正在读取文件,像扫描仪这样的东西可能会工作得更好。