繁体   English   中英

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

[英]Check string contains attribute from array list

嘿,我正在用Java编写计算器脚本。 我目前一直在努力寻找一种方法来查找字符串中是否有任何字符在ArrayList中。

例如:我必须将输入作为字符串,然后将此字符串传递给可以访问其中包含运算符和操作数的数组列表的方法。 如何确保该字符串仅包含此数组列表中的操作数和运算符?

谢谢,西亚兰

这是到目前为止我传递输入的代码。

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);

}



}

因此,您要取出数字,然后检查其余字符是否全部包含在opereators 假设您输入的String不太长,我建议您对operators使用HashSet而不是String []。 这样,您可以对字符串中不是数字的任何内容使用[contains(Object)][1]方法(将是O(1)而不是O(n))。

但是,随着验证的进行,您仍然必须检查更多内容,例如:“ 4 ++ 5 / -3”,其中操作数有效,但整体表达式无效。

根据评论进行编辑以满足要求

如果字符串仅包含-+/*或数字,则返回true:

public boolean checkInput(String input) {
    return input.matches("[-+/*0-9]+");
}

这使用正则表达式断言该字符串仅包含指定的字符。 正则表达式的细分:

  • [...]是一个字符类 ,列出了允许的字符
  • +表示“一个或多个前面的表达式”(在这种情况下为字符类)

请注意,字符类中的减号用于字符范围 ,例如0-9表示0123456789 但是,当在字符类中使用减号时,则表示字面的减号(而不是范围)。

关于String.matches()另一个说明-它必须与整个字符串匹配才能返回true。 这与许多其他语言不同,在其他语言中,如果部分字符串匹配,则类似的方法/函数将返回true。

如果要计算表达式,例如:

(3 + 4)* 5

(采用INFIX格式)。 直接读取字符串不是很明智。 您应该先将输入转换为POSTFIX或Reverse Polish格式,例如:

34 + 5 *

可以一一读取字符并使用堆栈来完成。 在这种情况下,您可以在“集合”或“地图”中逐个存储运算符,即时检查字符。

我建议您看看http://en.wikipedia.org/wiki/Reverse_Polish_notation以获得POSTFIX格式,并查看http://www.softwareandfinance.com/Java/Infix_Postfix_Converter.html作为转换代码示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM