2013-11-26 5 views
1

У меня есть массив строк, который выглядит следующим образом:Java печатать некоторые символы из массива

[67, +, 12, -, 45] 

Я хочу напечатать его так, что он выглядит следующим образом:

67 12 + 45 - 

Вот код Я пытаюсь использовать это.

String[] temp = line.split(" "); 
      String tmp = line.replaceAll("\\s+",""); 

      for(int i = 0; i < temp.length; i++) 
      { 
       if(isInt(temp[i]) == false) 
       { 
        expression = temp[i]; 
        firstExp = true; 
       } 
       else if(isInt(temp[i]) == false && firstExp == true && secondExp == false) 
       { 
        System.out.print(expression); 
        secondExp = true; 
       } 
       else if(isInt(temp[i]) == false && firstExp == true && secondExp == true) 
       { 
        System.out.print(expression); 
        firstExp = false; 
        secondExp = false; 
       } 
       else 
       { 
        System.out.print(temp[i]); 
       } 
      } 

firstExp и secondExp являются булевыми, которые проверяют для выражений, которые должны появиться в массиве. isInt() - это просто метод, используемый для определения того, является ли строка числом. Прямо сейчас, все это делает код выводится следующее:

671245 
+0

Есть ли какое-то правило, чтобы добраться до этого результата '67 12 + 45 -' –

+0

основном правилом является то, что она должна напечатать все номера, связанные с одно выражение сначала, а затем напечатать само выражение. – Generalkidd

+0

Итак, как насчет массива вроде: 65, 23, +, 36, -, 45? какой будет выход? –

ответ

1
public static void main (String[] args) throws java.lang.Exception 
    { 
     String[] expr = new String[]{"67", "+", "45", "-", "12", "*", "5", "/", "78"}; 
     int current = 0; 
     StringBuilder postfix = new StringBuilder(); 

     // handle first three 
     postfix.append(expr[current]).append(" "); 
     postfix.append(expr[current+2]).append(" "); 
     postfix.append(expr[current+1]).append(" "); 
     current += 3; 

     // handle rest 
     while(current <= expr.length-2){ 
      postfix.append(expr[current+1]).append(" "); 
      postfix.append(expr[current]).append(" "); 
      current += 2; 
     } 

     System.out.println(postfix.toString()); 
    } 

Выходы:

67 45 + 12 - 5 * 78/

Вы можете запустить/редактировать это at: http://ideone.com/zcdlEq

1

Я предполагаю, что вы пытаетесь преобразовать выражение infix в pos t исправить. Некоторое время назад я написал следующий код:

public class InfixToPostfix { 
    private Stack stack; 
    private String input; 
    private String output = ""; 
    public InfixToPostfix(String in) { 
     input = in; 
     int stackSize = input.length(); 
     stack = new Stack(stackSize); 
    } 
    public String translate() { 
     for (int j = 0; j < input.length(); j++) { 
     char ch = input.charAt(j); 
     switch (ch) { 
      case '+': 
      case '-': 
      hastOperator(ch, 1); 
      break; 
      case '*': 
      case '/': 
      hastOperator(ch, 2); 
      break; 
      case '(': 
      stack.push(ch); 
      break; 
      case ')': 
      hasSuperior(ch); 
      break; 
      default: 
      output = output + ch; 
      break; 
     } 
     } 
     while (!stack.isEmpty()) { 
     output = output + stack.pop(); 
     } 
     System.out.println(output); 
     return output; 
    } 
    public void hastOperator(char op, int precedence) { 
     while (!stack.isEmpty()) { 
     char opTop = stack.pop(); 
     if (opTop == '(') { 
      stack.push(opTop); 
      break; 
     } 
     else { 
      int prec2; 
      if (opTop == '+' || opTop == '-') 
      prec2 = 1; 
      else 
      prec2 = 2; 
      if (prec2 < precedence) { 
       stack.push(opTop); 
       break; 
      } 
      else 
      output = output + opTop; 
     } 
     } 
     stack.push(op); 
    } 
    public void hasSuperior(char ch){ 
     while (!stack.isEmpty()) { 
     char chx = stack.pop(); 
     if (chx == '(') 
     break; 
     else 
     output = output + chx; 
     } 
    } 
    public static void main(String[] args) 
    throws IOException { 
     String input = "67 + 12 - 45"; 
     String output; 
     InfixToPostfix theTrans = new InfixToPostfix(input); 
     output = theTrans.translate(); 
     System.out.println("Postfix is " + output + '\n'); 
    } 
    class Stack { 
     private int maxSize; 
     private char[] stackArray; 
     private int top; 
     public Stack(int max) { 
     maxSize = max; 
     stackArray = new char[maxSize]; 
     top = -1; 
     } 
     public void push(char j) { 
     stackArray[++top] = j; 
     } 
     public char pop() { 
     return stackArray[top--]; 
     } 
     public char peek() { 
     return stackArray[top]; 
     } 
     public boolean isEmpty() { 
     return (top == -1); 
    } 
    } 
    } 

Вы, возможно, потребуется изменить эту программу для чтения из массива, но это очень тривиально.

1

Вот как вы это делаете в одной строке:

System.out.println(Arrays.toString(temp).replaceAll("[^\\d +*/-]", "").replaceAll("[+*/-]) (\\d+)", "$2 $1")); 
Смежные вопросы