gpt4 book ai didi

java - 将 C# 转换为 Java 的 ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 11:59:05 25 4
gpt4 key购买 nike

我正在开发一个程序,该程序将遍历记录列表(ID 和票据)并将它们分别解析为两个列表。它还会交叉搜索列表,以查看哪些 ID 具有基于名称的相应票证。以下是早期版本的链接:here现在,我在同事的一些 C# 代码的帮助下进行了重写,但我在解析方法方面遇到了麻烦。这是 C# 版本:

        public void parseLine(string _line)
{
if(string.IsNullOrWhiteSpace(_line)){ return;}

code = _line.Substring(0, 3);
ticketID = _line.Substring(3, 10);

string tmp = _line.Substring(13).Trim();

//get the first and last name
string [] tmp1 = tmp.Split(",".ToCharArray());

if(!(tmp1.Length > 1))
{
throw new Exception("unable to get the first and last name");
}

lastname = tmp1[0];
firstname = tmp1[1].Trim();

}

这是我的 Java 版本:

    public void parseLine(String line) throws Exception {
// code will store Ticket code *Alpha ticketId will store 10
// *digit code
code = line.substring(0, 3);
ticketId = line.substring(3, 10);

// tmp will store everything afterthe first 13 characters of
// line and trim the name(s)
String tmp = line.substring(13).trim();

// tmp1 array
String[] tmp1 = tmp.split(".*,.*");

if (tmp1.length > 1) {

throw new Exception("UNABLE TO GET NAME");

}

last = tmp1[0];
first = tmp1[1].trim();
}

这是一个单独的类,它将为有票的人建模。我的主类(到目前为止)调用实际的 parseLine 方法如下:

public class ParkingTickets {

public static void main(String[] args) throws
FileNotFoundException, Exception {

ArrayList<TicketPeople> tickets = new ArrayList<>();
HashMap<String, List<SbPeople>> people = new HashMap<>();
File srcFile = new File("source.txt");

Scanner myScanner = new Scanner(srcFile);

while (myScanner.hasNextLine()) {
String line = myScanner.nextLine();
//System.out.println(line);
if (line.matches("^\\p{Alpha}.*$")) {
//System.out.printf("Ticket: %s%n", line);
TicketPeople t = new TicketPeople();
t.parseLine(line);
tickets.add(t);
}
myScanner.close();
}

}

}

编译器指向 parseLine 方法中的 if 语句,显然是主类中的 parseLine 方法,当我尝试单步执行 sepcifiv 行时,我看到它开始解析源文件中的数据,但有些东西已经关闭。从文档来看,该错误的含义是:抛出该错误以指示已使用非法索引访问了数组。索引可以为负数,也可以大于或等于数组的大小。我使用 ArrayList 作为票证列表,据我了解,它是一个动态列表,不需要设置特定的索引大小。我仍在学习中,无法理解这个异常。我将非常感谢任何帮助。

最佳答案

您在 Java 中对 split() 的调用与 C# 中的 split() 不匹配。

// String[] tmp1 = tmp.split(".*,.*");
String[] tmp1 = tmp.split(","); // <-- ",".

另外,你的检查逻辑似乎已经颠倒了。但是,我建议

if (tmp1.length != 2) {
throw new Exception("UNABLE TO GET NAME");
}

关于java - 将 C# 转换为 Java 的 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28122868/

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