Java 如何在两个字符上进行索引?
所以,我试着制作一个考虑乘法和除法顺序的计算器,我输入一个字符串,例如“6+43/2-5*12”,我的程序应该找到第一个除法或乘法位置 我可以在字符串上找到第一个乘法,如: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('/')
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:它返回基于正则表达式的字符串中找到的第一个字符的索引。