2012-01-10 3 views
1

문자열의 특정 부분에 공백을 삽입하고 싶습니다. 계산기 용 프로그램을 쓰고 있습니다. 예를 들어문자열의 특정 부분에 삽입

, 문자열

"23+45" 위해 나는 "23 + 45"되고 싶어요.

또는 "1+(4*8)""1 + (4 * 8)"으로 설정하십시오. 나는 공간에 따라 문자열을 분할 할 수 있도록 내가이 일을 해요

,

은 내가 입환 마당 알고리즘을 사용하고, 그래서 입력을 tokenise해야합니다.

+0

귀하의 질문은 ....이며 이것을 시도하는 코드는 다음과 같이 보입니다 .... 그러나 그것이 .... 당신이 예상했던 것 대신에 .... ?? –

+0

지금은 입력 자체에 공백을 삽입하고 있습니다. 그래서 나는 아직 이것을위한 코드를 가지고 있지 않습니다. 나는 프로그램의 나머지 부분을 썼지 만 이것과 관련이 없다. – saviok

답변

6

아주 간단합니다. trim()

"23+45".replaceAll("[+*()]", " $0 ").trim(); 

은 후행 공백을 트리밍합니다.

당신은 너무 같은 다른 연산자를 포함 할 수 있습니다

"23+(45*-30/2)".replaceAll("[+*()-/]", " $0 ").trim(); 
+0

+1. '-' (빼기)와'/'(나누기)를 잊어 버렸습니다. –

+0

이렇게하면 문자열에 여러 개의 공백이 생길 수 있으며, 다른 대체 공백을 제거하기 위해 다듬기 대신 다른 replaceAll을 수행 할 수 있습니다 :' "23 + 45".replaceAll ("[-/+ *()]", " $ 0 ") .replaceAll ("\\ s + "," "); ' – fivedigit

+0

@HarryJoy 내 답변을 업데이트했습니다. 그러나 '-'는 기호로 사용하면 공백으로 구분해서는 안된다고 생각합니다. 그것을 운영자로 사용하면 공간이 좋습니다. 어느 쪽이 더 좋아 보이는가? '2 * -4' 또는'2 * -4'? – adarshr

0

생각을하기 때문에 당신은 또한 또한 Class StringTokenizer를 사용하여 산술 연산자로 문자열을 분할 할 수있는 것보다, 문자열 목적을 분할의 공간을 추가. 더에 대한 StringTokenizer

+0

현대 자바에서'StringTokenizer'를 사용할 때 어떤 점도 보이지 않습니다. – adarshr

+0

다음은 시도 할 수있는 예입니다. String msg = "1+ (4 * 8)"; StringTokenizer st = 새 StringTokenizer (msg, "+ */-"); while (st.hasMoreTokens()) { System.out.println (st.nextToken()); –

+0

그게 내가 말하려고했던거야. 당신은 4 줄을 써야했고, 여전히 나에게 최종 문자열을주지 않습니다. 그렇게하기 위해, 당신은'StringBuilder'를 사용하기 위해 또 다른 3 줄을 추가해야합니다. – adarshr

0

SavK를 들어 ,

하는 토큰을 삽입 한 후 다시 구문 분석하는 추가 쓸모없는 작업이 될 것으로 보인다. (위의 무의미한, 정규식 솔루션은 간단하고 괜찮습니다. (+1을 +1하십시오.) 또는 토큰을 Shunting Yard 알고리즘 (입력으로 토큰이 필요함)에 직접 제공 할 수 있습니다.

토큰에 대한 표현식을 구문 분석하려면 StreamTokenizer 클래스 (JDK 1.0 이후)를 살펴보십시오. 모든 구문 분석을 수행하여 토큰을 반환해야합니다 (더 많은 것은 숫자를 정수형 토큰으로 가져옵니다).

여기는 원시 데모입니다.

package core; 

import java.io.IOException; 
import java.io.StreamTokenizer; 
import java.io.StringReader; 

public class Q { 
public static void main(String[] args) { 
    StreamTokenizer stok = new StreamTokenizer(new StringReader("1+(40*8)")); 
    stok.parseNumbers(); 
    try { 
     while(stok.nextToken() != StreamTokenizer.TT_EOF) { 
      System.out.println("nval: "+stok.nval); 
      System.out.println("sval: "+stok.sval); 
      System.out.println("ttype: "+stok.ttype); 
      System.out.println("toString: "+stok.toString()); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 
관련 문제