0

タイトルにあるのは、私のアレイのエラーです。どういう意味ですか????

また、ファイルを解析して、ENTER ENTER ENTER スペースのように最後にすべてのジャンクを削除するにはどうすればよいですか...空白ではありません..)

追記:もう寝ます。私は早起きして、私が得た助けを借りてそれを修正しようとします. みんなありがとう!

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 で解決するように配列を設定するにはどうすればよいですか?

4

3 に答える 3

0

空白を削除したい場合は、単純に次のように trim() を使用します。

String newVar = oldVar.trim();

これで新しい行と改行が削除されない場合は、次を使用します。

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

これにより、すべての行区切りが削除されます。

ファイルを読んでいるときにこれらの行をスキップしたい場合は、これを確認するための多くの回答と方法があります: Java String がすべての空白ではないことを確認するにはどうすればよいですか?

于 2013-11-05T06:52:24.200 に答える
0

変数 'line1' または 'line2' の 1 つに分割文字 ',' が含まれていないため、分割された文字列 [] のサイズが 1 になり、元の文字列全体が含まれます。この場合、インデックス 1 または 2 のフィールドにアクセスすると例外が発生します。これは、ファイルを読み込んで空の最後の行に到達したときによく発生します。配列のサイズを確認し、該当しない場合はコードをスキップすることをお勧めします。

于 2013-11-05T07:01:32.160 に答える
0

最初の質問: 配列の長さよりも大きい配列の要素にアクセスしようとしていることを意味します。

2番。読んだテキストにコンマが含まれていることを確認するために使用できString.contains(CharSequence s)ます。そうでない場合は、もちろん、すべての有効な行に値を区切るためにコンマが必要な場合は、ループでスキップします。

于 2013-11-05T06:38:15.553 に答える