我正在尝试通过运算符数组来查看其中一个运算符是否位于String中。
例如:
String[] OPERATORS = { "<", "<=", ... };
String line = "a <= b < c ";
我如何通过循环检查运算符是否在字符串中?
另外,说我的方法发现“&lt;”位于“&lt; =”
的字符串中但是,我正在寻找实际的字符串“&lt; = ”。 我该怎么做呢?
答案 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());
}
并且没有运营商的任何特殊排序。