验证带有异常的字符串

时间:2016-02-04 21:41:08

标签: java arrays string validation exception

我正在编写一个程序,假设从用户读取一个字符串并验证字符串和操作数。只有两个可接受的操作数是" +"和" - "。字符串不能包含除数字以外的任何字符,如果有,则应该说"输入错误"但不断提示用户。我已粘贴下面的代码,我们假设使用此程序的例外。我的代码没有工作,它崩溃了,这些数字需要总结和打印出来,但是我在使用字符串中的操作数时遇到了麻烦

 import java.util.Scanner;

public class Main {


public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    String term;

    do {
        String str = input.nextLine();
        term = str.trim();

        try {
            System.out.println(validInput(str));
            System.out.println(sumNums(str));
        } catch (IllegalOperandException e) {
            System.out.println("Bad Input");
        } catch (NumberFormatException e) {
            System.out.println("Bad Input");
        }

    } while (term.length() > 0);

}

public static String validInput(String string) throws IllegalOperandException {
    String output = "";
    String[] stringArray = string.split("\\s+");
    for (String s : stringArray) {
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (!(Character.isDigit(c) || c == '+' || c == '-' || c == '.' )) {
                throw new IllegalOperandException(String.valueOf(c));
            }
            else if(Character.isDigit(c)){
                Double.parseDouble(Character.toString(c));
            }
        }
        output = output + s + " ";
    }
    return output;


}

public static double sumNums (String nums) throws NumberFormatException, ArrayIndexOutOfBoundsException { 
    String[] stringArray2 = nums.split("\\s+"); 
    int i = 0;
    int sum; 

    if (stringArray2[i].equals("-")) { 
        i++;
        sum = Integer.parseInt(stringArray2[i]);    
    } else
        sum = Integer.parseInt(stringArray2[i]); 

    for(int j = 0; j < stringArray2.length; j++) {      

        if (stringArray2[i].equals("+"))    
            sum+=Integer.parseInt(stringArray2[i-1]);
        if (stringArray2[i].equals("-"))
            sum-=Integer.parseInt(stringArray2[i+1]);
    } 
    return sum; 


} 


}

1 个答案:

答案 0 :(得分:1)

首先,要抛出异常,您必须创建新对象。因此,正确的方法是

throw new IllegalOperandException(c);

其次,您将角色传递给构造函数,但构造函数只能接受String。您可以在IllegalOperandException

中创建第二个构造函数
public IllegalOperandException(char c){
    this(String.valueOf(c)); //this will call IllegalOperandException(String) constructor
}

或者您可以更改向此

引发异常的行
throw new IllegalOperandException(String.valueOf(c));

第三,return false无法访问。如果抛出异常,代码执行会直接跳转到catch语句,而validInput(String)无法返回任何内容(它无处可返回值)。所以,你不需要它