首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用一元运算符输出算术表达式?

如何用一元运算符输出算术表达式?
EN

Stack Overflow用户
提问于 2014-03-30 22:37:24
回答 1查看 127关注 0票数 1

我有一个带有一元运算符的算术表达式(字符串),我想把每个元素放在一个数组中。例如:-3+4.2*5==>output应该是:-3,+, 4.2,*,5(非-,3,+,4.2,*,5) 3+5 ==>输出应该是: 3,+,-5(带有一元运算符) (3/(5-8)+18)2==>output应该是:(,3,/,(,5,-,8,),+,18,2。

这是我到目前为止尝试过的代码,输出是3,+,-,5,它没有将一元运算符放在数字前面。

我的问题是如何正确地将每个元素放入数组中。

代码语言:javascript
复制
     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()]);
}}
EN

回答 1

Stack Overflow用户

发布于 2014-03-30 23:05:26

我想这是你想要的?

代码语言:javascript
复制
public static List<String> splitInfixExpression(String someString){
    List<String> someList = new ArrayList<String>();
    String tempString = "";
    for (int i = 0; i < someString.length(); i++){
        if (Character.isDigit(someString.charAt(i)) || (someString.charAt(i) == '-' && someString.length() == 0) || someString.charAt(i) == '.'){
            tempString += String.valueOf(someString.charAt(i));
            tempString = tempString.trim();
        }
        else{
            if (tempString.length() > 0){
                someList.add(tempString);
            }
            tempString = String.valueOf(someString.charAt(i));
            if (someList.size() > 0 && Character.isDigit(someList.get(someList.size() - 1).charAt(someList.get(someList.size() - 1).length() - 1))){
                someList.add(tempString);
                tempString = "";
            }
            else if (tempString.trim().length() > 0 && ((!tempString.equals("-"))) && ((!tempString.equals("+")))){
                someList.add(tempString);
                tempString = "";
            }
        }
    }
    someList.add(tempString);

    return someList;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档