0

プログラムを作成していますが、プログラムの一部が次の条件の式を受け取ります。

  • 許可された文字: "1234567890+-*/() " --それらの末尾のスペースに注意してください

  • バランスが取れている必要があります

  • 「(」と「)」で始まり、「」で終わる

  • 区切りは、各演算子、オペランド、または括弧の間の単一の空白です。

最初の 2 つの条件は完了しましたが、3 番目の条件で行き詰まっています。

例:

( 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 *separated 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 に答える