При попытке final project for my friend's ICS class я столкнулся с этой странной ошибкой.Почему использование Scanner.next() вызывает это странное поведение System.out.println()?
Одна из задач состояла в том, чтобы читать this CSV file. Это короткий SSCCE того, как я сделал это с помощью сканера:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner fileScanner;
String inputFile = "input-project.csv";
try {
fileScanner = new Scanner(new File(inputFile));
fileScanner.useDelimiter("[,\n]");
fileScanner.nextLine();
while(fileScanner.hasNext()) {
String name = fileScanner.next();
String number = fileScanner.next();
System.out.println("Inserting " + name + " " + number + " (" + hash(name) + ")");
//telephoneBook.insert(name, number);
}
fileScanner.close();
} catch (FileNotFoundException e) {
System.out.println("ERROR: Input file " + inputFile + " was not found");
}
}
public static Integer hash(String name) {
return name.hashCode() % 7;
}
}
Он читает отлично, но по какой-то причине System.out.println("Inserting " + name + " " + number + " (" + hash(name) + ")")
печатает только " (" + hash(name) + ")"
.
Взгляните на этот выход:
(5)
(1)
(4)
(5)
(3)
(1)
(4)
(2)
(2)
(2)
Process finished with exit code 0
Во время игры с этим кодом, пытаясь решить эту проблему, я заканчивал фиксируя его не используя fileScanner.next()
. Это мой текущий рабочий пример:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner fileScanner;
String inputFile = "input-project.csv";
try {
fileScanner = new Scanner(new File(inputFile));
//fileScanner.useDelimiter("[,\n]");
fileScanner.nextLine(); // skip the first line
while(fileScanner.hasNext()) {
String[] line = fileScanner.nextLine().split(",");
String name = line[0];
String number = line[1];
//String name = fileScanner.next();
//String number = fileScanner.next();
System.out.println("Inserting " + name + " " + number + " (" + hash(name) + ")");
//telephoneBook.insert(name, number);
}
fileScanner.close();
} catch (FileNotFoundException e) {
System.out.println("ERROR: Input file " + inputFile + " was not found");
}
}
public static Integer hash(String name) {
return name.hashCode() % 7;
}
}
Это печатает, как ожидалось:
Inserting HALL 123-4566 (5)
Inserting BAKER 111-1111 (1)
Inserting CARTER 222-2222 (4)
Inserting KING 555-5555 (5)
Inserting FOX 666-6666 (3)
Inserting LEE 777-7777 (1)
Inserting CASTRO 888-8888 (4)
Inserting DAVIS 999-9999 (2)
Inserting LONG 987-1234 (2)
Inserting KAM 654-7890 (2)
Process finished with exit code 0
Мой вопрос теперь: Почему это исправить эту проблему? Я использовал метод .next()
неправильно?