2014-10-09 2 views
0

지금은 입력 된 표현식을 Postfix 평가에 넣는 프로그램이 있습니다. 아래는 내 콘솔 사본입니다.출력에서 ​​각 문자 가져 오기 -

Enter an expression: ((5*2-1)/6+14/3)*(2*3-5)+7/2 
5 2 * 1 - 6/14 3/+ 2 3 * 5 - * 7 2/+ 

는 지금 그러나이 출력은 System.out.print의 조립의 무리이며, 출력을 통해 걸어해야합니다. 나는 stringBuilder를 사용하여 시도했지만 과 1과 4 사이의 차이점을 알 수 없다.

어쨌든이 출력의 각 문자를 살펴볼 수 있습니까? 이 숫자들을 스택에 넣어야합니다.

+0

tostring을 (를) 대체 할 수 있습니까? – jgr208

+0

14와 1과 4의 차이를 알 수 있도록 구분 기호를 추가 하시겠습니까? – Grice

+0

예 ... yourExpessionString.toCharArray() 및 Characher.isDigit (ch)를 사용하십시오. – StackFlowed

답변

0

String.split()과 숫자 정규 표현식 만 필요할 경우 사용할 수 있습니다. 여기

은 예입니다

public class Test { 

public static void main(String[] args) { 

      String str = "1 * 2 3/4 5 6"; 
      String[] arr = str.split(" ", str.length()); 

      for (int i=0;i < arr.length;i++) 
       System.out.println(arr[i] + "is diggit? " + arr[i].matches("-?\\d+(\\.\\d+)?")); 

     } 
    } 

STR 긴 문자열을 보유하고 있습니다. arr은 분할 된 하위 문자열을 보유합니다.

각 하위 문자열이 다른 하나의 공백과 다른지 확인해야합니다.

0

실제 문자열을 구문 분석해야하는 이유가 있습니까? 그렇다면

은, 당신이 뭘 만들 StringBuffer 또는 StringBuilder, 당신이 당신의 코드에서 System.out.print를 넣어 어디든지, 버퍼 추가 - 당신이 다음 1 4 (14)을 구별 도움이 될 것입니다 무엇 공간을 포함하여 당신은 그것을 String으로 변환 할 수 있습니다. 그런 다음 공백으로 문자열을 분할하여 구문 분석 할 수 있습니다. 그런 다음 결과 문자열 배열을 반복합니다.

실제 전체 문자열을 사용해야하는 이유가 없으면 List 개체를 사용하고 코드에서 동일한 위치에 add 만 사용할 수 있습니다. 이 경우 공백이 필요하지 않습니다. 그러면 목록을 반복 할 수 있습니다.

출력물을 인쇄 할 수도 있습니다. 목록의 요소를 인쇄하면됩니다.

0

글을 읽는 동안 코드를 삭제했지만, 개념적으로 개발 된 답변이 있습니다.

모든 문자를 입력 할 때 스택에 넣기를 원합니다.

언급 한 독특한 시나리오 14은 두 문자로 고유합니다.

그래서 마지막 문자가 숫자 인 경우 추적하는 것이 좋습니다.

대략적인 의사입니다. 이 스택을 지원하려면 스택이 모든 문자열이어야합니다.

//unique case for digit 
if(s.charAt(0).isDigit()) { 
    //check to see if the String at the top of a stack is a number by peeking at its first character 
    if(stack.peek().charAt(0).isDigit()) { 
     int i = Integer.parseInt(stack.pop()) * 10; 
     //we want to increment the entire String by 10, so a 1 -> 10 
     i = i + Character.getNumericValue(s.charAt(0)); //add the last digit, so 10 + 4 = 14 
     stack.push(Integer.toString(i)); //put the thing back on the stack 
    } 
    else { 
     //handle normally 
     stack.push(s.substring(0,1)); 
    } 
} 
관련 문제