Java 如何在两个字符上进行索引?

Java 如何在两个字符上进行索引?,java,Java,所以,我试着制作一个考虑乘法和除法顺序的计算器,我输入一个字符串,例如“6+43/2-5*12”,我的程序应该找到第一个除法或乘法位置 我可以在字符串上找到第一个乘法,如: int first_mult = string.indexOf('*'); int first_div = string.indexOf('/'); 第一部分是字符串,如: int first_mult = string.indexOf('*'); int first_div = string.indexOf('/')

所以,我试着制作一个考虑乘法和除法顺序的计算器,我输入一个字符串,例如“6+43/2-5*12”,我的程序应该找到第一个除法或乘法位置

我可以在字符串上找到第一个乘法,如:

int first_mult = string.indexOf('*');
int first_div = string.indexOf('/');
第一部分是字符串,如:

int first_mult = string.indexOf('*');
int first_div = string.indexOf('/');
这是可行的,但我想同时找到第一个乘法或除法,我试过:

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

但这是行不通的。有什么办法吗?

一种方法是使用
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;
for(int i=0;i
您可以使用。例如:

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

    return matcher.start();
}
显然,可以进行改进,例如将编译后的代码存储在合理的位置。

您也可以尝试使用此方法。
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;
}
公共静态void main(字符串[]args){ String String=“6+43/2-5*12”; 字符串[]进程={“/”,“*”}; 映射值=findWords(进程,字符串); System.out.println(values.toString()); } 公共静态映射findWords( 字符串[]进程,字符串短语){ 映射值=新的HashMap(); for(字符串专业:过程){ 堆栈索引=新堆栈(); 对于(inti=-1;(i=phrase.indexOf(pro,i+1))!=-1;){ 增加(i)项指标; } 值。put(pro,indexs); } 返回值; }
您可以找到
first\u mult
first\u div
。你为什么不把它们比较一下,得到最小的0或两个正数呢?所以你要先计算优先级,然后再计算更高的优先级?还有,据我所知,你想先找到它们的索引来计算它们吗?@forpas这就是我到目前为止一直在做的事情,问题是什么?@forpas可能是因为我弄错了,但如果我不使用至少一个除法或乘法,那就行不通了,因为它将数字与null进行比较。所以匹配器返回基于正则表达式的字符串中找到的第一个字符?@Compilerv2:它返回基于正则表达式的字符串中找到的第一个字符的索引。