Список файлов: roster.txt
Reagan rebradshaw835
Ryley rbarber894
Peyton pstott885
Tyrese tmayo945
Caius ccharlton329
Программа связана с обработкой исключений. Проблема, которую я пытаюсь решить в настоящий момент, заключается в том, чтобы получить правильный результат. Я не знаю, есть ли конкретный способ найти строку, содержащую имя, и вернуть все в строке, кроме имени. так что мы можем вернуть назначенное имя пользователя.
Например, первая строка показывает:
Reagan rebradshaw835
Метод возвращает только rebradshaw835
Вот код:
package chapter11;
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.IOException;
public class LabProgram {
public static String findID(String studentName, Scanner infoScnr) throws Exception {
return studentName;
}
public static String findName(String studentID, Scanner infoScnr) throws Exception {
return studentID;
}
public static void main(String[] args) throws IOException {
Scanner scnr = new Scanner(System.in);
String studentName;
String studentID;
String studentInfoFileName;
FileInputStream studentInfoStream = null;
Scanner studentInfoScanner = null;
// Read the text file name from user
studentInfoFileName = scnr.next();
// Open the text file
studentInfoStream = new FileInputStream(studentInfoFileName);
studentInfoScanner = new Scanner(studentInfoStream);
// Read search option from user. 0: findID(), 1: findName()
int userChoice = scnr.nextInt();
// FIXME: findID() and findName() may throw an Exception.
// Insert a try/catch statement to catch the exception and output the exception message.
try {
if (userChoice == 0) {
studentName = scnr.next();
studentID = findID(studentName, studentInfoScanner);
System.out.println(studentID);
}
else {
studentID = scnr.next();
studentName = findName(studentID, studentInfoScanner);
System.out.println(studentName);
}
studentInfoStream.close();
}
catch (Exception exp) {
}
}
}
2 ответа
Вам нужно прочитать каждую строку из Scanner
и split()
строки в массив из 2 значений, а затем сравнить его. Попробуйте этот код:
public static String findID(String studentName, Scanner infoScnr) throws Exception {
while (infoScnr.hasNextLine()) {
String line = infoScnr.nextLine();
String[] values = line.split(" ", 2);
if (studentName != null && studentName.equals(values[0])) {
return values[1];
}
}
throw new Exception ("Student name not found for " + studentName);
}
public static String findName(String studentID, Scanner infoScnr) throws Exception {
while (infoScnr.hasNextLine()) {
String line = infoScnr.nextLine();
String[] values = line.split(" ", 2);
if (studentID != null && values.length > 1 && studentID.equals(values[1])) {
return values[0];
}
}
throw new Exception ("Student id not found for " + studentID);
}
.split (" ")
Для интервала
.split ("/n")
Для новой строки (nextLine)
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
line.split(" ", 2)
разделит строку на массив с двумя или менее значениями с пробелом в качестве разделителя. Пример:Reagan rebradshaw835
будет разделен на массив изReagan
иrebradshaw835
.Reagan rebradshaw835 anotherspace
будет разделен на массив изReagan
иrebradshaw835 anotherspace
, даже если вrebradshaw835 anotherspace
есть пробелline = "Reagan rebradshaw835"
, сString[] values = line.split(" ", 2);
мы получилиString[] values = {"Reagan", "rebradshaw835"}