是否可以检查字符串上是否包含特殊字符或字母,如果是,则抛出异常?
类似这样但使用try / catch
/** Get and Checks if the ssn is valid or not **/
private String getSSN(){
String tempSSN;
tempSSN = scan.nextLine();
if(tempSSN.matches("^.*[^a-zA-Z ]{9}.*$") == false){
System.out.print("enter a valid SSN without spaces or dashes.");
tempSSN= scan.nextLine();
}
return tempSSN;
}
答案 0 :(得分:1)
如果您可以在没有异常处理的情况下执行此操作,则没有明显的理由说明您使用try-catch
块的原因。但是如果你想抛出异常,那么使用try-catch块并不是必须的。您可以使用throw
。
if(something) {
throw new SomeAppropriateException("Something is wrong");
}
如果要捕获异常并记录任何错误或消息并继续执行,则可以使用catch
块。或者,当你想抛出其他有意义的异常时,你会发现异常。
答案 1 :(得分:0)
我会将字符导入到一个字符数组中,然后使用循环来检查要为其抛出异常的字符类型的每个字符。
下面有一些sudo代码:
private String getSSN(){
String tempSSN = scan.nextLine();
try {
char a[] = tempSSN.toCharArray();
for (int i = 0; i < a.length(); i++) {
if(a[i] != ^numbers 0 - 9^) { //sudo code here. I assume you want numbers only.
throw new exceptionHere("error message"); // use this to aviod using a catch. Rest of code in block will not run if exception is thrown.
}
catch (exceptionHere) { // runs if exception found in try block
System.out.print("enter a valid SSN without spaces or dashes.");
tempSSN= scan.nextLine();
}
return tempSSN;
}
我还会考虑在数组上运行if,长度不是9个字符。我假设您正在尝试捕获始终为9个字符的ssn。
if (a.length != 9) {
throw ....
}
您可以在没有try / catch的情况下执行此操作。如果他们第二次输入无效的ssn,上述情况就会中断。
private String getSSN(){
String tempSSN = scan.nextLine();
char a[] = tempSSN.toCharArray();
boolean marker;
for (int i = 0; i < a.length(); i++) {
if(a[i] != ^numbers 0 - 9^) { //sudo code here. I assume you want numbers only.
boolean marker = false;
}
while (marker == false) {
System.out.print("enter a valid SSN without spaces or dashes.");
tempSSN = scan.nextLine();
for (int i = 0; i < a.length(); i++) {
if(a[i] != ^numbers 0 - 9^) { //sudo code here. I assume you want numbers only.
marker = false;
else
marker = true;
}
}
return tempSSN;
}
我可以选择以某种方式使用contains方法。
boolean marker = tempSSN.contains(i.toString()); // put this in the for loop and loop so long as i < 10; this will go 0 - 9 and check them all.