2012-01-09 3 views
4

각 행이 "파이프"문자로 둘러싸인 이와 같은 것을 만들고 싶습니다. 첫 줄 동일한 수의 열을 갖도록 출력 형식 지정

| First Line | 
| 100 200 | 
| 1000 2000 | 
  • 는 오른쪽 패딩 한 공간이다.
  • 두 번째 줄에서 오른쪽 패딩은 4 공백입니다.
  • 세 번째 줄에는 2 칸이 있습니다.

나는 printf + formating (그리고 패딩 번호를 명시 적으로 계산하지 않음)을 통해이를 시도하지만 formating 구문에 약간의 문제가 있습니다.

System.out.printf("| FIRST LINE" + "%50s\n", "|"); 
System.out.printf("| 100 200" + "%50s", "|"); 
System.out.printf("| 1000 2000" + "%50s", "|"); 

내가 줄에 최대 50 개 문자) 또 다른 "파이프"라인의 첫 번째 문자를 줄에 "파이프"를 마지막 문자 인 것을 나타 내기 위해서 노력하고있어 여기에 내 현재 코드입니다 .

왼쪽 부분에 이미 사용 된 문자 (예 : "| 첫 번째 줄")를 고려하지 않고 50 개의 공백이 배치되는 것이 문제입니다. 위의 코드는 다음과 유사합니다.

System.out.format("%s %50s\n", "| FIRST LINE", "|"); 

그렇다면 두 문자열의 너비가 고려되도록 출력 형식을 어떻게 정의 할 수 있습니까?

미리 감사드립니다.

답변

6

시도 Formatter.

는 출력
StringBuffer sb = new StringBuffer(); 
Formatter f = new Formatter(sb, Locale.getDefault()); 
f.format("| %-50s |%n", "FIRST LINE"); 
f.format("| %-50s |%n", "200 100"); 
f.format("| %-50s |%n", "1000 2000"); 
String finalResult = sb.toString(); 
System.out.println(finalResult); 

: 자동으로 가장 긴 문자열 플러스 두 개의 문자를 동일하게 패딩을 선택합니다

 
| FIRST LINE           | 
| 200 100           | 
| 1000 2000           | 
+0

"% -50s |" 이것은 내가 찾고있는 올바른 형식입니다. 이 포맷은 System.out.format과 함께 사용할 수 있습니다 (명시 적 포맷터는 필요하지 않습니다). – MyNameIsZero

+0

내 솔루션보다 확실히 좋음 (당연히 작동) +1 –

+3

하지만 플랫폼 기본 행 끝을 사용하려면'\ n '대신'% n'을 사용하십시오. –

0

StringBuilder을 사용할 수 있습니다. 문자를 설정하고 문자열을 대체하는 메소드가 있습니다. 먼저 StringBuilder를 만들고 공백과 끝을 포함하는 문자를 채 웁니다. 그런 다음 파이프 문자를 올바른 위치에 놓습니다. 마지막으로, 중간에있는 공백을 형식이 지정된 문자열로 바꿉니다. 줄 바꿈 문자를 세는 것을 잊지 말고, 줄에 대해 메서드 줄을 작성하고 다른 StringBuilder를 사용하여 줄을 함께 추가하십시오.

+0

"명시 적 패딩 구성"이 될 필요는 없습니다. 댓글을 주셔서 감사합니다. – MyNameIsZero

+0

그런 경우 숙제를 표시 할 수 있습니까? 이것이 장점없는 해결책을 허용하지 않는 이러한 것들 중 하나이기 때문입니다. –

+0

숙제가 아닙니다. 나는 "패딩"솔루션을 찾고 있다고 언급하지 않았다. "format"메서드에 대한 올바른 구문을 찾고있었습니다 (그리고이를 증명하기 위해 printf/format 예제를 제공했습니다). 죄송합니다 텍스트가 명확하지 않은 경우 도움을 주셔서 다시 한 번 감사드립니다. – MyNameIsZero

0

뭔가 (같은 | FIRST LINE | 위)은 불가능하지만 꽤 있었을 것이다 산뜻한. 도움이

System.out.println(String.format("| %10s |", "FIRST LINE")); 
    System.out.println(String.format("| %10s |", "100 200")); 
    System.out.println(String.format("| %10s |", "1000 2000")); 

희망 :

내가 당신을 도울 수있는 최선은 다음과 같다.

관련 문제