2012-10-30 3 views
3

Java에서 출력을 동적으로 변경하는 방법이 있습니까?콘솔/터미널에 인쇄 된 이전 문자를 삭제하는 방법은 무엇입니까?

System.out.print("H") 

을하고 내가 가진 : 예를 들어, 터미널 창에 내가있는 경우

System.out.print("I") 

가 출력 될 것입니다 : 위치를 지정하는 방법이

HI 

있는가 문자를 동적으로 바꿀 수있는 출력으로? 예를 들어 (그리고 나는 이것이 내가 원하는, 내가 단지 내 생각을 증명하려는 출력 않을 것 알고)이 :

System.out.print("H") 
Thread.sleep("1") 
System.out.print("I") 

을 그리고 처음

H 

다음 두 번째 이후

을 인쇄 할 것이다, H를 I로 바꾸시겠습니까?

나는 이것이 바보처럼 들리 겠지만, 나는 GUI없이 동적으로 내용을 바꾸는 것에 관심이있다. 누군가이 기술에 대한 방향으로 나를 가리킬 수 있습니까? 대단히 감사드립니다.

+1

음, 콘솔에 당신은 할 수 없습니다. 코드를 다시 실행하지 않고 이미 표시된 출력을 생략 할 수 없습니다. –

+0

감사합니다. 그게 내가 알아야 할 전부 야! – eatonphil

+1

가능한 중복 : http://stackoverflow.com/questions/7522022/how-to-delete-stuff-printed-to-console-by-system-out-println – dan

답변

1

당신은 여기에 표시된 예에서

System.out.printf 

봐 봐 걸릴 수도 있습니다 : http://masterex.github.com/archive/2011/10/23/java-cli-progress-bar.html

편집 : 당신이 형식을 적용 할 수 있습니다 의미

의 printf 표시 형식의 문자열을하고, 필요에 따라 변경하십시오.

당신은 같은 것을 할 수있는, 예를 들면 : 주석이 솔루션은 사용자의 요구에 그러나 의존 단일 라인으로 제한됩니다 말한다 http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax

으로 : 여기에있는 포맷 문자열 구문을 사용하여

String[] planets = {"Mars", "Earth", "Jupiter"};   
String format = "\r%s says Hello"; 

for(String planet : planets) { 
    System.out.printf(format, planet); 
try { 
     Thread.sleep(1000); 
    }catch(Exception e) { 
     //... oh dear 
    } 
} 

을 이 정도면 충분할 것이다.

전체 화면에 대한 솔루션이 필요한 경우 가능한 해결책은 JNA를 사용하여 운영 체제를 연결하고 콘솔 창에서 핸들을 가져 와서 높이를 찾은 다음 println을 루프하는 것입니다 () 창을 "지우고"출력을 다시 그립니다. https://github.com/twall/jna

+0

해당 예제의 제한은 현재 행을 다시 그립니다. – millimoose

+0

나는 printf와 대체 솔루션에 관한 더 많은 내용으로 포스트를 업데이트했다. –

+0

마음에 떠오르는 또 다른 것은 :'\ r'은 커서를 줄의 처음으로 옮기는 것 뿐이다. 이전에 작성한 모든 것을 삭제하지 않는다는 의미입니다. 대신 이전 문자를 덮어 쓰게됩니다. 즉, 한 줄을 짧은 줄로 바꾸려면 다소 까다 롭습니다. 나머지는 공백으로 겹쳐 써야합니다. – millimoose

2

당신은 백 스페이스 이전 문자를 지우 \b를 사용할 수 있습니다

당신이 더 나는 여기에 더 많은 질문에 대답하거나 할 수 읽고 싶다면

는 링크입니다.
$ cat T.java 
import java.lang.Thread; 

public class T { 
    public static void main(String... args) throws Exception { 
     System.out.print("H"); 
     System.out.flush(); 
     Thread.sleep(1000); 
     System.out.print("\bI\n"); 
     System.out.flush(); 
    } 
} 
$ javac T.java && java T 
I 

이 출력 H, 그런데 어느 초 후에 I로 교체한다.

슬프게도 Eclipse 콘솔에서는 작동하지 않지만 일반적인 콘솔에서는 작동하지 않습니다.

1

이 당신이 필요로하는 무엇인가가 (캐리지 리턴을 사용하여 '\ R'이전의 출력을 덮어 쓰기합니다) :

System.out.print("H"); 
    Thread.sleep(1000); 
    System.out.print("\rI"); 
관련 문제