这个方法是基于中缀表达式转换为后缀表达式的。
所以是顺序扫表表达式,该方法只是实现了读取表达式中的数字
package yudi.other;
import java.util.ArrayList;
import java.util.List;
public class GetNumberInString {
public static List getNumberInString(String str){
List result = new ArrayList();//记录最终结果
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i))) {//如果是数字,执行方法
readNumber(str, i, result);
}
}
return result;
}
/**
*
* @param str 字符串
* @param i 扫描位置
* @param result 最终结果
*/
public static void readNumber(String str, int i,List result){
int index = i;
int count = 1;//记录扫描时倍数,如23:3是1倍,而2是十倍
int numberTarget = Integer.valueOf(String.valueOf(str.charAt(i)));//记录当前的数字
if (i == 0){//如果是字符串中的第一个数字
result.add(numberTarget);//直接加在结果列表中
}else {
if (result.size() != 0 && index > 0 && Character.isDigit(str.charAt(index - 1)))//如果结果列表非空且字符串前面的字符也是数字
result.remove(result.size() - 1);//移除结果列表中之前的数字
while (index > 0 && Character.isDigit(str.charAt(index - 1))){
count *= 10;//倍数加10倍
numberTarget = Integer.valueOf(String.valueOf(str.charAt(index - 1))) * count + numberTarget;//字符串前面的数字加倍后加上当前数字
index--;
}
result.add(numberTarget);//将最终结果加入结果集
}
}
public static void main(String[] args) {
String infix = "1246+7-90*100";
List postfix = getNumberInString(infix);
for (int i = 0; i < postfix.size(); i++){
System.out.print(postfix.get(i) + " | ");
}
}
}
测试结果: