Как перейти на новую строку после определенной длины строки? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть массив, который должен перейти на новую строку после того, как он достигнет определенного предела количества символов, но я не хочу, чтобы он обрезал число. Я пытался преобразовать массив в строку, чтобы избавиться от скобок и пробелов, но я не могу найти строку, чтобы перейти на новую строку в правильном месте. Как мне это сделать? Спасибо!

Текущий код (это беспорядок, я пробовал много разных решений из других постов)

System.out.println(n + " (" + numDivisors + " proper divisors)");
    System.out.print("...proper divisors: ");

    String temp = Arrays.toString(properDivisors).replace("]", ",").replace(" ", "");
    String finalDiv = temp.substring(1, temp.length());
    if (finalDiv.length() > len) {
        for (int i = len; i <= len; i--){
            if (finalDiv.charAt(len) == ',') {
                finalDiv = finalDiv.replaceAll(".{" + i + "}", "$0\n\t\t    ");
                System.out.print(finalDiv);
            }
        }
    } else {
        System.out.println(finalDiv);
    }

Желаемый выход

86268 (47 proper divisors)                                                               
...proper divisors: 1,2,3,4,6,7,12,13,14,21,26,28,39,42,52,78,79,84,91,
                    156,158,182,237,273,316,364,474,546,553,948,1027,
                    1092,1106,1659,2054,2212,3081,3318,4108,6162,6636,
                    7189,12324,14378,21567,28756,43134,

1 Ответ

0 голосов
/ 03 сентября 2018

Будет проще, если вы строите строку и печатаете ее только тогда, когда превышаете длину строки. Не бросайте Arrays.toString(), просто создайте строковое представление самостоятельно.

String prefix = "...proper divisors: ";
// Same number of chars as prefix, just all spaces.
String emptyPrefix = prefix.replaceAll(".", " ");
for (int i = 0; i < properDivisors.length;) {

  // Take as many of the items in the array as you can, without exceeding the
  // max line length.
  StringBuilder sb = new StringBuilder(prefix);
  for (; i < properDivisors.length; ++i) {
    int lengthBefore = sb.length();

    // Append the next item, and comma, if it would be needed.
    sb.append(properDivisors[i]);
    if (i + 1 < properDivisors.length) sb.append(",");

    if (sb.length() > maxWidth) {
      // Truncate back to the length before appending.
      sb.setLength(lengthBefore);
      break;
    }
  }
  System.out.println(sb);

  // Blank out the prefix, so you will print leading spaces on next line.
  prefix = emptyPrefix;
}

Демо Ideone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...