这个方法是基于中缀表达式转换为后缀表达式的。 所以是顺序扫表表达式,该方法只是实现了读取表达式中的数字
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) + " | "); } } }测试结果:
