문자열의 특정 부분에 공백을 삽입하고 싶습니다. 계산기 용 프로그램을 쓰고 있습니다. 예를 들어문자열의 특정 부분에 삽입
, 문자열
"23+45"
위해 나는 "23 + 45"
되고 싶어요.
또는 "1+(4*8)"
을 "1 + (4 * 8)"
으로 설정하십시오. 나는 공간에 따라 문자열을 분할 할 수 있도록 내가이 일을 해요
,
은 내가 입환 마당 알고리즘을 사용하고, 그래서 입력을 tokenise해야합니다.
문자열의 특정 부분에 공백을 삽입하고 싶습니다. 계산기 용 프로그램을 쓰고 있습니다. 예를 들어문자열의 특정 부분에 삽입
, 문자열
"23+45"
위해 나는 "23 + 45"
되고 싶어요.
또는 "1+(4*8)"
을 "1 + (4 * 8)"
으로 설정하십시오. 나는 공간에 따라 문자열을 분할 할 수 있도록 내가이 일을 해요
,
은 내가 입환 마당 알고리즘을 사용하고, 그래서 입력을 tokenise해야합니다.
아주 간단합니다. trim()
"23+45".replaceAll("[+*()]", " $0 ").trim();
은 후행 공백을 트리밍합니다.
당신은 너무 같은 다른 연산자를 포함 할 수 있습니다
"23+(45*-30/2)".replaceAll("[+*()-/]", " $0 ").trim();
+1. '-' (빼기)와'/'(나누기)를 잊어 버렸습니다. –
이렇게하면 문자열에 여러 개의 공백이 생길 수 있으며, 다른 대체 공백을 제거하기 위해 다듬기 대신 다른 replaceAll을 수행 할 수 있습니다 :' "23 + 45".replaceAll ("[-/+ *()]", " $ 0 ") .replaceAll ("\\ s + "," "); ' – fivedigit
@HarryJoy 내 답변을 업데이트했습니다. 그러나 '-'는 기호로 사용하면 공백으로 구분해서는 안된다고 생각합니다. 그것을 운영자로 사용하면 공간이 좋습니다. 어느 쪽이 더 좋아 보이는가? '2 * -4' 또는'2 * -4'? – adarshr
생각을하기 때문에 당신은 또한 또한 Class StringTokenizer
를 사용하여 산술 연산자로 문자열을 분할 할 수있는 것보다, 문자열 목적을 분할의 공간을 추가. 더에 대한 StringTokenizer
현대 자바에서'StringTokenizer'를 사용할 때 어떤 점도 보이지 않습니다. – adarshr
다음은 시도 할 수있는 예입니다. String msg = "1+ (4 * 8)"; StringTokenizer st = 새 StringTokenizer (msg, "+ */-"); while (st.hasMoreTokens()) { System.out.println (st.nextToken()); –
그게 내가 말하려고했던거야. 당신은 4 줄을 써야했고, 여전히 나에게 최종 문자열을주지 않습니다. 그렇게하기 위해, 당신은'StringBuilder'를 사용하기 위해 또 다른 3 줄을 추가해야합니다. – adarshr
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();
}
}
}
귀하의 질문은 ....이며 이것을 시도하는 코드는 다음과 같이 보입니다 .... 그러나 그것이 .... 당신이 예상했던 것 대신에 .... ?? –
지금은 입력 자체에 공백을 삽입하고 있습니다. 그래서 나는 아직 이것을위한 코드를 가지고 있지 않습니다. 나는 프로그램의 나머지 부분을 썼지 만 이것과 관련이 없다. – saviok