我正在创建一个程序,程序的一部分会收到一个包含以下条件的表达式:
允许的字符:“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,空白索引
答案 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;
}