有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组解析错误。。。ArrayIndexOutOfBoundsException 1 JAVA

在标题中,我的数组有一个错误。这是什么意思

还有,我该如何解析文件以删除结尾处的所有垃圾,比如输入空格。。。(就像马车返回了几次,空行……我不知道这些是什么……它们肯定不是空白……)

编辑:我现在要睡觉了。我会早起,在别人的帮助下设法解决它。谢谢大家

while (scanner1.hasNextLine() && scanner2.hasNextLine())
{
    String line1 = scanner1.nextLine();
    String line2 = scanner2.nextLine();

    // parse line1
    String[] line1Tokens = line1.split(",");

    // parse line2
    String[] line2Tokens = line2.split(",");

    // Print
    String ticket = line1Tokens[0];
    String arrived1 = line1Tokens[2];
    String arrived2 = line1Tokens[3];

    String pickup1 = line2Tokens[1];
    String pickup2 = line2Tokens[2];

这就是整个方法:

 public static void merge(File file1, File file2) throws IOException
 {
 Scanner scanner1 = new Scanner(file1);
 Scanner scanner2 = new Scanner(file2);
 String trash = scanner1.nextLine();
 String trash2 = scanner2.nextLine();


while (scanner1.hasNextLine() && scanner2.hasNextLine())
{
    String line1 = scanner1.nextLine();
    String line2 = scanner2.nextLine();

    // parse line1
    String[] line1Tokens = line1.split(",");

    // parse line2
    String[] line2Tokens = line2.split(",");

    // Print
    String ticket = line1Tokens[0];
    String arrived1 = line1Tokens[2];
    String arrived2 = line1Tokens[3];

    String pickup1 = line2Tokens[1];
    String pickup2 = line2Tokens[2];

    System.out.println("Ticket: " + ticket + ", " + 
                       "Arrived: " + arrived1 + ":" + arrived2 + " --- " + 
                       "Pickup: " + pickup1 + ":" + pickup2 + " --- " + 
                       "Cost: ");
}
}

我收到的错误是:

Ticket: 1421, Arrived: 12:8 --- Pickup: 12:9 --- Cost: 
Ticket: 1422, Arrived: 12:8 --- Pickup: 12:12 --- Cost: 
Ticket: 1423, Arrived: 12:9 --- Pickup: 12:13 --- Cost: 
Ticket: 1424, Arrived: 12:9 --- Pickup: 12:14 --- Cost: 
Ticket: 1425, Arrived: 12:9 --- Pickup: 12:16 --- Cost: 
Ticket: 1426, Arrived: 12:9 --- Pickup: 12:17 --- Cost: 
Ticket: 1427, Arrived: 12:10 --- Pickup: 12:18 --- Cost: 
Ticket: 1428, Arrived: 12:10 --- Pickup: 12:19 --- Cost: 
Ticket: 1429, Arrived: 12:11 --- Pickup: 13:21 --- Cost: 
Ticket: 1430, Arrived: 12:12 --- Pickup: 13:7 --- Cost: 
Ticket: 1431, Arrived: 12:14 --- Pickup: 13:9 --- Cost: 
Ticket: 1432, Arrived: 12:17 --- Pickup: 13:16 --- Cost: 
Ticket: 1433, Arrived: 12:19 --- Pickup: 13:19 --- Cost: 
Ticket: 1434, Arrived: 12:21 --- Pickup: 13:20 --- Cost: 
java.lang.ArrayIndexOutOfBoundsException: 1
at ParkingLot.merge(ParkingLot.java:45)
at LotDriver.main(LotDriver.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

编辑:所以我开始用我获得的所有信息更正它
这是我到目前为止的方法代码

public static void merge(File file1, File file2) throws IOException
{
Scanner scanner1 = new Scanner(file1);
Scanner scanner2 = new Scanner(file2);
String trash = scanner1.nextLine();
String trash2 = scanner2.nextLine();


while (scanner1.hasNextLine() && scanner2.hasNextLine())
{
  String line1 = scanner1.nextLine();
  String line2 = scanner2.nextLine();
  String ticket = "";
  String arrived1 = "";
  String arrived2 = "";
  String pickup1 = "";
  String pickup2 = "";


  // parse line1

  //    String[] line1Tokens = line1.split(",");

  // parse line2
  //   String[] line2Tokens = line2.split(",");
  if (line1.contains(","))
  {
    String[] line1Tokens = line1.split(",");
    // Print
  ticket = line1Tokens[0];
  arrived1 = line1Tokens[2];
  arrived2 = line1Tokens[3];
  }
  if (line2.contains(","))
  {
    String[] line2Tokens = line2.split(",");
  pickup1 = line2Tokens[1];
  pickup2 = line2Tokens[2];
  }

  System.out.println("Ticket: " + ticket + ", " + 
                     "Arrived: " + arrived1 + ":" + arrived2 + " --- " + 
                     "Pickup: " + pickup1 + ":" + pickup2 + " --- " + 
                     "Cost: ");
 }
}

然而,它仍然给了我一个错误

 java.lang.ArrayIndexOutOfBoundsException: 1
at ParkingLot.merge(ParkingLot.java:45)
at LotDriver.main(LotDriver.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

有人帮忙吗?如何设置数组以解决-1所有问题


共 (2) 个答案

  1. # 1 楼答案

    如果要删除空白,只需像这样使用trim()

    String newVar = oldVar.trim();
    

    如果这无法删除新行和回车,请使用以下方法:

    newVar = newVar.replaceAll("\\r|\\n", "");
    

    这将删除所有行分隔符

    如果你想在阅读文件时跳过这些行,这里有很多答案和检查方法: How do I check that a Java String is not all whitespaces?

  2. # 2 楼答案

    第一个问题: 这意味着您试图访问数组中大于该数组长度的元素

    其次。 您可以使用String.contains(CharSequence s)检查您读取的文本中是否有逗号,如果没有,则在循环中跳过它,当然,如果所有有效行都必须有逗号来分隔值