java - 获取模式匹配或 do while 循环中的 try catch 问题,即使输入所需的输入也会导致循环循环
问题描述
我遇到的问题的具体部分是提示输入名称的这部分代码。
public void setName() {
do {
System.out.println("Enter name: ");
name = input.nextLine();
try {
Pattern pattern = Pattern.compile(name);
Matcher matcher = pattern.matcher("[a-zA-Z]");
} catch (PatternSyntaxException e) {
}
} while (false);
}
由于它应该是人名,自然不允许使用数字、标点符号和符号。我使用了一个 do while 循环来循环提示以及一个 try catch 块。为了检查输入,我使用模式匹配来搜索是否输入了数字。出于某种原因,我无法打破循环。我曾尝试使用中断,但当我输入符号时,它只是打破了循环。我应该更改代码的哪一部分以使其仅在输入字母或单词时才中断?
这是整个程序(不包括驱动程序类)
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Sales {
private int transaction;
private int salesNum;
private String name;
private double amount;
private double commission;
Scanner input = new Scanner(System.in);
//default constructor
public Sales() {
transaction = 0;
salesNum = 0;
name = "";
amount = 0.0;
}
//getter method
public int getTransaction() {
return transaction;
}
public int getSalesNum() {
return salesNum;
}
public String getName() {
return name;
}
public double getAmount() {
return amount;
}
public double getCommRate() {
return commission;
}
//setter method
public void setTransaction() {
do {
System.out.println("Enter transaction number: ");
try {
transaction = Integer.parseInt(input.nextLine());
break;
} catch (NumberFormatException e) {
}
} while (true);
}
public void setSalesNum() {
do {
System.out.println("Enter sales number: ");
try {
salesNum = Integer.parseInt(input.nextLine());
break;
} catch (NumberFormatException e) {
}
} while (true);
}
public void setName() {
do {
System.out.println("Enter name: ");
name = input.nextLine();
try {
Pattern pattern = Pattern.compile(name);
Matcher matcher = pattern.matcher("[a-zA-Z]");
} catch (PatternSyntaxException e) {
}
} while (false);
}
public void setAmount() {
System.out.println("Enter amount: ");
amount = input.nextDouble();
}
@Override
public String toString() {
setTransaction();
setSalesNum();
setName();
setAmount();
return String.format("%s, your transaction number and sales number are %d and %d respectively. Total amount is %.2f.\n", this.getName(), this.getTransaction(), this.getSalesNum(), this.getAmount());
}
}
解决方案
推荐阅读
- sql - 过滤结果以仅显示一列中具有重复记录的结果
- regex - 具有多个级别的 Countif 和 ArrayFormula
- c++ - 如何从向量中正确返回 unique_ptr?
- python - How do you add with variables in python
- php - 为什么 PDO fetchAll() 两次返回相同的结果?
- batch-file - 如何处理字符串搜索/替换中的特殊字符(<、>、"、=)
- apache-spark - 如何从 Spark 数据框中随机选择行,而基于列的条件也必须成立
- ios - Xcode -FirebaseCore 词法或预处理器问题“GoogleUtilities/GULAppEnvironmentUtil.h”文件未找到
- java - 数据流和 Bigtable 依赖冲突
- laravel - 如何在 laravel 中将数据从视图发送到控制器