查看String是否包含数组中的元素

时间:2014-03-26 16:52:07

标签: java arrays string element contain

我正在尝试通过运算符数组来查看其中一个运算符是否位于String中。

例如:

String[] OPERATORS    = { "<", "<=", ... };
String line = "a <= b < c ";

我如何通过循环检查运算符是否在字符串中?

另外,说我的方法发现“&lt;”位于“&lt; =”

的字符串中

但是,我正在寻找实际的字符串“&lt; = ”。 我该怎么做呢?

4 个答案:

答案 0 :(得分:6)

我会使用正则表达式而不是所有运算符的数组。另外,请确保运算符在正则表达式中的顺序正确,即<=应该在<之前,类似地,==应该在=之前:

String regex = "<=|<|>=|>|==|=|\\+|-";

String line = "a <= b < c ";

Matcher matcher = Pattern.compile(regex).matcher(line);

while (matcher.find()) {
    System.out.println(matcher.start() + " : " + matcher.group());
} 

<强>输出

2 : <=
7 : <

诀窍是,在正则表达式与< <=匹配之前,它已经<=匹配,因为它在<之前。

答案 1 :(得分:3)

这样的事情应该考虑&gt; =匹配&gt;。

String[] OPERATORS = {"<=>", "<=", ">=", ">", "=" ..} //The key here is that if op1 contains op2, then it should have a lower index than it

String copy = new String(line);

for(String op : OPERATORS)
{
    if(copy.contains(op))
    {
        copy = copy.replaceAll(op, "X"); //so that we don't match the same later
        System.out.println("found " + op);
    }
}

如果您还需要索引,那么当您需要用多个长度相同的X替换OP时。如果你可以拥有每个操作的倍数,并且你需要所有操作的位置,那么它仍然可以工作。但问题并不是过于具体。无论如何,这应该让你滚动。

答案 2 :(得分:0)

以下是我要做的事情:

for(String operator : OPERATORS)
{
    if(Pattern.compile("[\\s\\w]" + operator + "[\\s\\w]").matcher(line).find())
    {
        System.out.println(operator + " found in " + line);
    }
}

它在<中找不到<=运算符方面应该可以正常工作。

完整代码:

import java.util.regex.Pattern;

public class Test
{
    public static void main(String[] args)
    {
        String[] OPERATORS = { "<", "<="};
        String line = "a <= b < c ";

        for(String operator : OPERATORS)
        {
            if(Pattern.compile("[\\s\\w]" + operator + "[\\s\\w]").matcher(line).find())
            {
                System.out.println(operator + " found in " + line);
            }
        }
    }
}

答案 3 :(得分:0)

仅当操作员在两侧都有空间时才会起作用:

for (String operator : OPERATORS) {
    Matcher m = Pattern.compile("\\s\\" + operator + "\\s").matcher(line);
    while (m.find())
         System.out.println((m.start() + 1) + " : " + m.group());
}

并且没有运营商的任何特殊排序。