문제

이것은 베스트 a의 셀을 인쇄하는 방법 String[][] 오른쪽 정당화 된 테이블로 배열? 예를 들어 입력

{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }

출력을 산출해야합니다

  x xxx
yyy   y
 zz  zz

이것은 그게 뭔가처럼 보입니다 ~해야 한다 사용을 달성 할 수 있습니다 java.util.Formatter, 그러나 비정상적인 필드 너비를 허용하지 않는 것 같습니다. 가장 좋은 답변은 공간 문자의 수동 삽입이 아니라 테이블 셀을 패딩하기위한 표준 방법을 사용합니다.

도움이 되었습니까?

해결책

실제로 필드의 너비를 지정하면 올바른 정당화해야합니다.
가장 긴 문자열에 대해 최소한의 동적 패딩이 필요한 경우 배열을 걷고, 최대 너비를 얻고,이 maxima에서 계산 된 너비로 형식 문자열을 생성하고, 출력 형식에 사용하십시오.

다른 팁

다음은 각 열에 동적으로 생성 된 형식 문자열을 사용하는 답변입니다.

public static void printTable(String[][] table) {
  // Find out what the maximum number of columns is in any row
  int maxColumns = 0;
  for (int i = 0; i < table.length; i++) {
    maxColumns = Math.max(table[i].length, maxColumns);
  }

  // Find the maximum length of a string in each column
  int[] lengths = new int[maxColumns];
  for (int i = 0; i < table.length; i++) {
    for (int j = 0; j < table[i].length; j++) {
      lengths[j] = Math.max(table[i][j].length(), lengths[j]);
    }
  }

  // Generate a format string for each column
  String[] formats = new String[lengths.length];
  for (int i = 0; i < lengths.length; i++) {
   formats[i] = "%1$" + lengths[i] + "s" 
       + (i + 1 == lengths.length ? "\n" : " ");
 }

  // Print 'em out
  for (int i = 0; i < table.length; i++) {
    for (int j = 0; j < table[i].length; j++) {
      System.out.printf(formats[j], table[i][j]);
    }
  }
}

가장 긴 줄의 길이를 찾으십시오 ..
왼쪽 패드는 그 길이 + 1까지 공백으로 모든 줄을 공백합니다.
System.out. 루프 용으로 2 개의 중첩 된 사용을 인쇄합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top