Список файлов: 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) {
      }
   }
}
0
Jake 21 Ноя 2021 в 06:47

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);
}
0
vhthanh 21 Ноя 2021 в 09:15
Не могли бы вы объяснить мне этот код в методе более подробно, если это возможно? Я понимаю, что вы сделали, но я не знаком с разделением строк. Я вижу line.split "", 2) :, и я вижу, что он разделяет строку до тех пор, пока не появится пробел в 2.
 – 
Jake
21 Ноя 2021 в 07:16
line.split(" ", 2) разделит строку на массив с двумя или менее значениями с пробелом в качестве разделителя. Пример: Reagan rebradshaw835 будет разделен на массив из Reagan и rebradshaw835. Reagan rebradshaw835 anotherspace будет разделен на массив из Reagan и rebradshaw835 anotherspace, даже если в rebradshaw835 anotherspace есть пробел
 – 
vhthanh
21 Ноя 2021 в 08:00
Для быстрого объяснения: line = "Reagan rebradshaw835", с String[] values = line.split(" ", 2); мы получили String[] values = {"Reagan", "rebradshaw835"}
 – 
vhthanh
21 Ноя 2021 в 08:02
Также у меня проблемы с моими исключениями.
 – 
Jake
21 Ноя 2021 в 08:27
Общедоступная статическая строка findID (String studentName, Scanner infoScnr) выдает исключение {while (infoScnr.hasNextLine ()) {String line = infoScnr.nextLine (); String [] values ​​= line.split ("", 2); if (studentName! = null && studentName.equals (значения [0])) {возвращаемые значения [1]; } if (studentName! = null &&! studentName.equals (values ​​[0])) {throw new Exception ("Имя студента не найдено для" + studentName); }} return null;
 – 
Jake
21 Ноя 2021 в 08:28
.split (" ")

Для интервала

.split ("/n")

Для новой строки (nextLine)

0
Bisaya Coding 21 Ноя 2021 в 08:56
Спасибо!!! Я тоже ценю вашу помощь. Это что-то новое, с чем меня познакомили.
 – 
Jake
21 Ноя 2021 в 16:25