我有一元運算符的算術表達式(字符串),我想把每個元素放入一個數組中。例如:-3 + 4.2 * 5 ==>輸出應該是:-3,+,4.2,*,5(非 - ,3,+,4.2,*,5) 3 + -5 ==>輸出應該(3,/,(,5, - ,8,)爲:3,+, - 5(與一元運算符) (3 /(5-8)+18)2 ==> ,+,18),,2如何使用一元運算符輸出算術表達式?
這是我到目前爲止的代碼,輸出是3,+, - ,5,它沒有把一元運算符放在數字的前面。
我的問題是如何正確地將每個元素放入數組中。
public class Test2 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Input:");
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String[] arr1= splitInfixExpression(input);
for(int i=0;i<arr1.length;i++)
{
System.out.println(arr1[i]);
}
}
priva te static boolean isOperandChar(final char c) {
return Character.isDigit(c) || c == '.';
}
private static boolean isParenthesis(final char c) {
return c=='('||c==')';
}
private static String[] splitInfixExpression(final String input) {
final List<String> postfixExpression = new ArrayList<>();
boolean encounteredOperandStart = false;
String currentOperand = "";
for (final char c : input.toCharArray()) {
if (encounteredOperandStart) {
if (isOperandChar(c)) {
currentOperand += c;
}
postfixExpression.add(currentOperand);
postfixExpression.add(String.valueOf(c));
currentOperand = "";
encounteredOperandStart = false;
} else {
if (isOperandChar(c)) {
encounteredOperandStart = true;
currentOperand += c;
}
else if(isParenthesis(c)) {
postfixExpression.add(String.valueOf(c));
//currentOperand = "";
encounteredOperandStart=false;
}
else{
postfixExpression.add(String.valueOf(c));
//currentOperand = "";
encounteredOperandStart=false;
}
}
}
if (!currentOperand.isEmpty()) {
postfixExpression.add(currentOperand);
}
return postfixExpression.toArray(new String[postfixExpression.size()]);
}}
這是一個相當激烈的邏輯問題。說實話,我甚至不想嘗試它。我會使用正則表達式。 – aliteralmind
也見http://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form – aliteralmind
aliteralmind,這不是我的專題評估問題,它是如何把一個字符串數組。 – Sophie