如何在两个字符上使用.indexOf?

时间:2019-05-23 15:16:54

标签: java

因此,我正在尝试制作一个尊重乘法和除法顺序的计算器,我键入一个字符串,例如“ 6 + 43 / 2-5 * 12”,并且我的程序应该找到第一个除法或乘法位置。

我可以在String上找到第一个乘法:

int first_mult = string.indexOf('*');

第一个除法字符串类似:

int first_div = string.indexOf('/');

可以,但是我想同时找到第一个乘法或除法,

int first_oper = string.indexOf('*'||'/');

但这不起作用。有什么办法吗?

3 个答案:

答案 0 :(得分:7)

您可以使用Matcher进行此操作。例如:

public int indexOfOperator(final String string) {
    final Matcher matcher = Pattern.compile("[*/]").matcher(string);
    if (!matcher.find()) {
        return -1;
    }

    return matcher.start();
}

显然可以进行改进,例如将编译后的Pattern存储在合理的位置。

答案 1 :(得分:4)

一种方法是使用IntStream

int first_oper = IntStream.range(0, string.length())
    .filter(i -> string.charAt(i) == '*' || string.charAt(i) == '/')
    .findFirst()
    .orElse(-1);

或者,当然,使用循环:

for (int i = 0; i < string.length(); ++i) {
  switch (string.charAt(i)) {
    case '*': case '/': return i;
  }
}
return -1;

答案 2 :(得分:-1)

you can try this one also.

public static void main(String[] args) {
    String string = "6+43/2-5*12";
    String[] process = { "/", "*" };

    Map<String, Stack<Integer>> values = findWords(process, string);

    System.out.println(values.toString());
}

public static Map<String, Stack<Integer>> findWords(
        String[] process, String phrase) {
    Map<String, Stack<Integer>> values = new HashMap<>();

    for (String pro : process) {
        Stack<Integer> indexs = new Stack<>();

        for (int i = -1; (i = phrase.indexOf(pro, i + 1)) != -1;) {
            indexs.add(i);
        }

        values.put(pro, indexs);
    }

    return values;
}