0

我正在创建一个程序,该程序的一部分接收到一个具有以下条件的表达式:

  • 允许的字符:“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, is * S *eparated with * S *ingle * W *ite * S *pace

indexOfWS,空白索引

4

2 回答 2

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;
}
于 2012-11-02T23:07:48.237 回答
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;
}
于 2012-11-02T23:09:09.320 回答