因此,我正在尝试制作一个尊重乘法和除法顺序的计算器,我键入一个字符串,例如“ 6 + 43 / 2-5 * 12”,并且我的程序应该找到第一个除法或乘法位置。
我可以在String上找到第一个乘法:
int first_mult = string.indexOf('*');
第一个除法字符串类似:
int first_div = string.indexOf('/');
可以,但是我想同时找到第一个乘法或除法,
int first_oper = string.indexOf('*'||'/');
但这不起作用。有什么办法吗?
答案 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;
}