gpt4 book ai didi

java - 从文件收集信息到Map

转载 作者:行者123 更新时间:2023-12-01 06:15:40 27 4
gpt4 key购买 nike

我有一个包含以下内容的文档:

32 : { 15, 25, 65 }

43 : { 90, 45, 12 }

65:{50}

我想映射这些字符串,我尝试过:

public static void Collect(String entry)
{
entry = entry.replace("{", "");
entry = entry.replace(" "," ");
String[] lines = entry.split(" }");
Map<Integer, Integer[]> map = new HashMap<>();
List<Integer> temp = new ArrayList<>();
for(String s : lines)
{
if(!s.contains(":"))
continue;
int owner = Integer.parseInt(removeReverse(s, ":", 1).replace(" ","");
if(s.contains(",") {

if(s.contains(",")) {
for(String s1 : s.split(",")) {
s1 = removeUntil(s1,":",1);
temp.add(Integer.parseInt(s1));
}}
map.put(owner, (Integer[]) temp.toArray());
}
else {
temp.add(Integer.parseInt(formatter(s,"{","}"));
map.put(owner, (Integer[]) temp.toArray());
}
}
}

引用方法:

public static String formatter(String text,String start,String end)
{
if(text.length() == 0) return null;
int s = text.lastIndexOf(start)+start.length();
int e = text.indexOf(end);
return text.substring(s,e);
}

public static String removeUntil(String str, String c, int st)
{
StringBuilder sb = new StringBuilder(str);
str = sb.reverse().toString();
for(int i = 0;i<st;i++)
str = str.substring(0,str.lastIndexOf(c));
sb = new StringBuilder(str);
str = sb.reverse().toString();
return str;
}
public static String removeReverse(String str,String c,int st)
{
StringBuilder sb = new StringBuilder(str);
sb = new StringBuilder(removeUntil(sb.reverse().toString(),c,st));
return sb.reverse().toString();
}

毕竟,我尝试在主方法中将“ map 的entrySet”打印为

map.entrySet().forEach(Operator::print);

Operator.print方法->

public static void print(Object o)
{
System.out.print(o);
}

但是,输出是一个异常(exception)。输出->

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1954)
at Operator.removeUntil(Operator.java:23)
at Operator.removeReverse(Operator.java:31)
at Operator.readHashTable(Operator.java:122)
at MainScreen.main(MainScreen.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

最佳答案

您的算法存在错误。我将你的代码复制到我的 IDE 中,并成功重现了相同的错误。问题是第三次调用 removeUntil()。进一步分析表明,removeUntil 正在尝试查找不存在的数字 52(它在第一行中混合了 15 25)。

您的代码困惑且令人困惑。我给你的建议是:简化你的算法,在你的脑海中回顾(或使用纸张),如果它是带有打印数字的财务对象,你会怎么做。可能您会先分割行,然后用 ':' 分割,最后再用 ',' 分割

关于java - 从文件收集信息到Map<K, V>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com