【发布时间】:2018-01-24 21:35:35
【问题描述】:
我正在尝试编写一个将字符串作为输入的程序。
这个字符串必须是一个只有括号、运算或数字的方程。
我在下面发布的代码是我想出的,但是当我运行它时,我输入的任何内容显然都是无效的字符串。谁能告诉我我做错了什么?
System.out.println("Enter a string");
String str = s.nextLine(); //s is a Scanner object
int n = str.length();
for(int i = 0; i < n; i++) {
if( !Character.isDigit(str.charAt(i)) || str.charAt(i) != '+'
|| str.charAt(i) != '-' || str.charAt(i) != '*'
|| str.charAt(i) != '/' || str.charAt(i) != '('
|| str.charAt(i) != ')' || str.charAt(i) != '['
|| str.charAt(i) != ']' || str.charAt(i) != '{'
|| str.charAt(i) != '}') {
System.out.println("invalid string, try again: ");
str = s.nextLine();
}
...}
【问题讨论】:
-
每个字符都不是'-'或不是'+'。我想你想要 && 不是 || .
-
如果你讨厌自己,那当然。我宁愿保持清晰。
-
此外,通常在方程式中允许空格(“1 + 2”而不是“1+2”),而您的规范不允许这样做。另外,带有不平衡括号 ("1)+2") 的方程仍然可以通过您的测试。我认为直接进行解析而不用担心“字符”可能会更好。
-
@svasa 我不同意。当包含或实际解析可以时,这是一个可怕的正则表达式(特别是在 Java 中)。可维护性和易读性几乎总是胜过其他任何事情。
-
@Jason
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.blog.codinghorror.com/…