检查字符串包含数组列表中的属性

时间:2013-12-15 21:17:49

标签: java arrays string arraylist

嘿,我正在用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);

}



}

3 个答案:

答案 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 例如转换代码。

相关问题