私はプロジェクトの例外クラスを書いていますが、問題に悩まされています。このクラスは、銀行口座を含むファイル名を要求し、ファイルを読み取り、特定の基準を満たしているかどうかを確認します。これらの基準のいずれかを満たさない場合、タイプ BankAccountException のエラーがスローされます。これは、単純extends
にException
クラス名が変更されたカスタム エラー クラスです。私が直面している問題は、ファイルの名前を入力すると、プログラムがすぐに別のファイルの名前を要求することです。私はしばらくこれに座っていて、それを理解することができません。助けていただければ幸いです。
import java.util.*;
import java.io.*;
public class BankAccountProcessor{
public static void main(String[] args){
boolean runProgram = true;
Scanner input = new Scanner(System.in);
String filename;
while (runProgram = true){
try{
System.out.println("Please enter the name of the file you want to parse.");
filename = input.next();
File file = new File(filename);
Scanner inputFile = new Scanner(file);
while (inputFile.hasNext()){
String accountLine = inputFile.nextLine();
if (BankAccountProcessor.isValid(accountLine) == true){
System.out.println("Line " + accountLine + " has been processed.");
}
runProgram = false;
}
}
catch(FileNotFoundException e){
System.out.println("That file does not exist");
}
catch(BankAccountException e){
}
}
}
private static boolean isValid(String accountLine) throws BankAccountException{
StringTokenizer stringToken = new StringTokenizer(accountLine, ";");
String tokenOne = stringToken.nextToken();
String tokenTwo = stringToken.nextToken();
if (stringToken.countTokens() != 2){
throw new BankAccountException("Invalid Bank Account Info");
}
else if (tokenOne.length() != 10){
throw new BankAccountException("Invalid Bank Account Info: Account Number is not 10 digits.");
}
else if (tokenTwo.length() < 3){
throw new BankAccountException("Invalid Bank Account Info: Name must be more than 3 letters.");
}
else if (BankAccountProcessor.hasLetter(tokenOne) == true){
throw new BankAccountException("Invalid Bank Account Info: Account Number must be all digits.");
}
else if (BankAccountProcessor.hasDigit(tokenTwo) == true){
throw new BankAccountException("Invalid Bank Account Info: Account Name cannot have digits.");
}
return true;
}
private static boolean hasDigit(String str){
for (char c : str.toCharArray()){
if (Character.isDigit(c)){
return true;
}
}
return false;
}
private static boolean hasLetter(String str){
for (char c : str.toCharArray()){
if (Character.isLetter(c)){
return true;
}
}
return false;
}
}