// 来 自 时代Java - N o w J a v a . c o m
//package com.nowjava;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Main {
public static void main(String[] argv) throws Exception {
String normalExpression = "nowjava.com";
System.out.println(getInversePolandExpression(normalExpression));
}
static private List<String> getInversePolandExpression(
/*
*来 自
nowjava - 时代Java
*/
String normalExpression) {
List<String> inversePolandExpression = new ArrayList<String>();
char[] normalChararray = (normalExpression + "$").toCharArray();
//
Stack<String> signStack = new Stack<String>();
List<Stack<String>> signStackList = new ArrayList<Stack<String>>();
signStackList.add(signStack);
//
int level = 0;
int pointPosition = 0;
double tempNumber = 0;
boolean isInInteger = true;
for (int i = 0; i < normalChararray.length; i++) {
char tempChar = normalChararray[i];
//
if (tempChar >= '0' && tempChar <= '9') {
//
if (isInInteger) {
tempNumber = tempNumber * 10 + (int) (tempChar - 48);
}
// ?
else {
tempNumber += (double) (tempChar - 48)
* Math.pow(0.1, i - pointPosition);
}
}
// ?
else if (tempChar == '.') {
isInInteger = false;
pointPosition = i;
}
//
else if (tempChar == '+' || tempChar == '-' || tempChar == '*'
|| tempChar == '/' || tempChar == '$') {
//
isInInteger = true;
// ?
if (tempNumber > 0) {
inversePolandExpression.add(String.valueOf(tempNumber));
}
// 0
tempNumber = 0;
// ???
if ((tempChar == '+') || (tempChar == '-')
|| tempChar == '$') {
while (!signStackList.get(level).isEmpty()) {
//
inversePolandExpression.add(signStackList
.get(level).pop());
}
}
// ?
signStackList.get(level).push(tempChar + "");
} else if (tempChar == '(') {
signStack = new Stack<String>();
signStackList.add(signStack);
level++;
} else if (tempChar == ')') {
//
isInInteger = true;
// ?
/**代码未完, 请加载全部代码(NowJava.com).**/
本文系作者在时代Java发表,未经许可,不得转载。如有侵权,请联系nowjava@qq.com删除。