嘿,我正在用Java编写计算器脚本。 我目前很难找到一种方法来查找sting中的任何字符是否在ArrayList中。
例如: 我必须将输入作为字符串我将此字符串传递给一个方法,该方法可以访问包含运算符和操作数的数组列表。如何确保字符串仅包含此数组列表中的操作数和运算符?
谢谢,Ciaran
这是我到目前为止输入的代码..
import java.util.*;
public class stringCalculator {
private String[] operators = {"+","-","/","*"};
public stringCalculator(String userinput){
System.out.println(userinput);
public boolean checkInput(){
}
}
}
这是新代码。
import java.util.*;
public class stringCalculator {
private String userinput;
HashSet<String> op = new HashSet<String>();
public stringCalculator(String userinput){
this.userinput = userinput;
//System.out.println(userinput);
HashSet<String> op = new HashSet<String>();
op.add("+");
op.add("-");
op.add("*");
op.add("/");
this.op = op;
System.out.println(op);
}
public void checkTheInput(){
System.out.println(userinput);
}
public boolean checkInput(){
return op.contains(userinput);
}
}
答案 0 :(得分:0)
因此,您想要取出数字,然后检查其余字符是否全部包含在opereators
中。假设您的输入字符串不是太长,我建议您使用HashSet
而不是operators
的字符串[]。这样,您可以使用[contains(Object)][1]
方法(对于O(1)而不是O(n))来处理String中不是数字的任何内容。
然而,在验证过程中,您仍需要检查更多内容,例如:“4 ++ 5 / -3”,其中操作数有效,但整体表达式不是。
答案 1 :(得分:0)
如果字符串仅包含-+/*
或数字,则返回true:
public boolean checkInput(String input) {
return input.matches("[-+/*0-9]+");
}
这使用正则表达式断言该字符串仅包含指定的字符。正则表达式的细分:
[...]
是字符类,其中列出了允许的字符+
表示“前面一个或多个表达式”(在本例中为字符类)请注意,字符类中的减号表示范围字符,例如0-9
表示0123456789
。但是,如果在字符类中最后一个使用减号,则表示文字减去(不是范围)。
关于String.matches()
的另一个注释 - 它必须与整个字符串匹配才能返回true。这与许多其他语言不同,如果字符串的 part 匹配,类似的方法/函数将返回true。
答案 2 :(得分:0)
如果要计算表达式,例如:
(3 + 4)* 5
(以INFIX格式)。直接阅读弦乐是不明智的。您应该首先将输入转换为POSTFIX或反向波兰语格式,如:
34 + 5 *
这可以通过逐个读取字符并使用堆栈来完成。在这种情况下,您可以逐个检查字符,将运算符存储在Set或Map中。
我建议您查看http://en.wikipedia.org/wiki/Reverse_Polish_notation的POSTFIX格式和http://www.softwareandfinance.com/Java/Infix_Postfix_Converter.html 例如转换代码。