如何检查表达式的每个部分是否由单个空格分隔?

时间:2012-11-02 22:59:40

标签: java expression

我正在创建一个程序,程序的一部分会收到一个包含以下条件的表达式:

  • 允许的字符:“1234567890 + - * /()” - 注意到它们末尾的空格

  • 必须平衡

  • 以“(”和“)”

  • 开头和结尾
  • 分隔是每个运算符,操作数或/和括号之间的单个空格:

我已经完成了前两个条件,但我遇到了第三个条件。

示例:

(1 +((22-322)* 4/5))<<<有效

1 + ((22-322)* 4/5))<<<无效

(1 + (( 22-322)* 4/5))<<<无效

(1 +((22-322 )* 4/5))<<<无效

这是我到目前为止所做的:

public static boolean isSSWS(String e) {

    boolean valid = false;
    int indexOfWS = 0;
    Character preChar = '\0';
    Character postChar = '\0';

    while(!valid && (indexOfWS < e.length())) {
        indexOfWS = e.indexOf(" ", indexOfWS + 1);
        preChar = e.charAt(indexOfWS - 1);
        postChar = e.charAt(indexOfWS + 1);

        if(preChar == ' ' || postChar == ' ') {
            return false;
        }
    }

    return true;
}

isSSWS,是* S *与* S * ingle * W * ite * S *分开*步伐

indexOfWS,空白索引

2 个答案:

答案 0 :(得分:0)

编辑,我没注意到数字不应该有空格。有点乱,但适用于我尝试的所有输入。

public static boolean isSSWS(String s) {
    boolean isWhiteSpace = false;
    boolean isPreviousCharDigit = false;

    for (char c : s.toCharArray()) {
        if (!isPreviousCharDigit || !Character.isDigit(c)) {
            if (c == ' ' && !isWhiteSpace) {
                return false;
            }
            if (c != ' ' && isWhiteSpace) {
                return false;
            }
            isWhiteSpace = !isWhiteSpace;
        }
        isPreviousCharDigit = Character.isDigit(c);
    }
    return true;
}

答案 1 :(得分:0)

public static boolean isSSWS(String e) {

    for (int i=1; i < e.length() - 1; i++){
        char preChar = e.charAt(i - 1);
        char postChar = e.charAt(i + 1);
        char zchar = e.charAt(i);

        if (zchar == ' ' && (preChar == ' ' || postChar == ' ')){
            return false;
        }

        if (Character.isDigit(zchar)){
            if (!Character.isDigit(preChar) && preChar != ' '){
                return false;
            }
            if (!Character.isDigit(postChar) && postChar != ' '){
                return false;
            }
        }

        if (("+-*/()".indexOf(zchar) != -1) && (preChar != ' ' || postChar != ' ')){
            return false;
        }
    }

    return true;
}