2010-02-09 2 views
6

System.out.print()의 출력을 무시할 수있는 방법이 있습니까? 내가 뭘하려고하는거야? System.out.print ("A B C D E F G H I J K L"); 출력 : A B C D E F G H I K K LSystem.out.print()의 출력을 오버라이드 (OOP 오버라이드가 아닌)하는 방법은 무엇입니까?

이제 특정 위치에서이 출력을 무시하는 방법을 작성하려고합니다. 같은 것, override (7, "X Y Z"); 나를 출력해야합니다. A B C X Y Z G H I J K L

이러한 사항은 콘솔에서 바로 발생해야합니다.

도와주세요. 감사합니다.

+0

어떤 터미널 프로그램이 사용되고 있는지에 따라 달라질 수 있습니다. 아마도 누군가가 Java 라이브러리를 작성하여 (아마도 SDK에는 없지만) 그 라이브러리를 추상화했다고 가정합니다. –

+0

두 번째 라인에서 10 초를 소비하여 특별한 것을 알아 냈습니다. D – Harry

답변

2

System.out은 출력 스트림입니다. 일단 당신이 무언가를 넣으면, 당신은 그 다음에 들어가서 그것을 바꿀 수 없습니다. 가능하다해도 그 시점에서 바이트 표현입니다. 가장 가까운 곳은 데이터를 표준 출력으로 보내거나 다른 쪽에서 데이터를 캡처 할 수 있도록 콘솔을 래핑하기 전에 수정 작업을 수행하는 것입니다.

+0

감사합니다. – bragboy

0

setOut 메서드를 사용할 수 있습니다.

+0

@kgiannakakis - 좋은 대답 ...하지만 그가 요구하는 것이 아닙니다. –

+1

및 1.4.2 문서에 대한 링크 제공 중지 – Bozho

1

현재 작성하고있는 행을 수정해야하는 경우 다음 행으로 넘어 가지 않고 행의 시작 부분에 커서를 재배치하는 "\ r"문자를 쓸 수 있습니다. 여기에서 전체 행을 다시 쓸 수 있습니다. 예를 들면 :

A B C D E F G\rA B C X Y 

당신이 크로스 플랫폼 다움 이상 라인의 편집이 필요하면, 당신은 아마 시작하고

A B C X Y F G 

아마 (적어도, 유닉스 틱 시스템)를 표시 할 Curses과 같은 라이브러리의 영역으로 들어갈 수 있습니다. 거기에 자바에 대한 구체적인 제안은 할 수 없지만 주위를 둘러 볼 수는 있습니다 ...

9
  1. PrintStream - 예. public class YourPrintStream extends PrinterStream.
  2. print(String s) 메서드를 덮어 쓰고 원하는 방식으로 문자열을 변경하십시오. 그런 다음 super.print(s))으로 전화하십시오.
  3. 전화 System.setOut(new YourPrintStream()) 그리고 매번 System.out.println가 호출

, 전달 된 문자열은 실제 스트림으로 이동하기 전에 사용자가 제어 될 것입니다.

+0

답변 해 주셔서 감사합니다. 하지만 내 목표를 달성하기 위해 write() 메서드 안에 무엇을 넣을 것인가? – bragboy

+0

거의 간단한 문자열 조작입니다. 적어도 시도해보십시오. – Bozho

+0

안녕하세요, Bozho, 좋은 생각입니다. System.err과 System.out을이 새로운 인쇄 스트림으로 설정하면,'print (String s)'메소드에서'System.err'인지'System.out'인지를 알 수있는 방법이 있습니까? 요구? –

0

ejbs를 사용하거나 aop 기능을 사용하는 경우 사용자가 인터셉터를 사용하도록 제안합니다.

System.out에 대한 각 호출은 실제로 문자열을 입력하기 전에 가로 챌 수 있습니다.

관련 문제