如何使用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将字符串放在手边,或者在读取下一行时调用中间行。但是,如果您正在读取文件,像扫描仪这样的东西可能会工作得更好。