Ограничение количества символов в строке и обрезка остальных - PullRequest
50 голосов
/ 03 декабря 2011

Мне нужно создать сводную таблицу в конце журнала с некоторыми значениями, которые получены внутри класса. Таблица должна быть напечатана с фиксированной шириной формат. У меня есть код, чтобы сделать это уже, но мне нужно ограничить строки, удваивает и вставляет в размер фиксированной ширины, жестко закодированный в коде.

Итак, предположим, я хочу напечатать таблицу фиксированной ширины с

    int,string,double,string
    int,string,double,string
    int,string,double,string
    int,string,double,string

    and the fixed widths are: 4, 5, 6, 6.

Если значение превышает эту ширину, последние символы должны быть обрезаны. Так например:

    124891, difference, 22.348, montreal

строки, которые должны быть напечатаны, должны быть:

    1248 diffe 22.348 montre

Я думаю, мне нужно сделать что-то в конструкторе, который вызывает строка не должна превышать определенное количество символов. я, вероятно приведите двойные и целые числа к строке, чтобы я мог установить максимальную ширину требования.

Я не знаю, какой метод это делает или можно ли создать строку для вести себя так. Использование форматтера помогает только с исправлено форматирование для печати строки, но на самом деле это не так рубить символы, которые превышают максимальную длину.

Ответы [ 8 ]

155 голосов
/ 21 ноября 2014

Вы также можете использовать String.format("%3.3s", "abcdefgh").Первая цифра - это минимальная длина (строка будет дополнена слева, если она короче), вторая цифра - максимальная длина, и строка будет обрезана, если она длиннее.Так что

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");

будет производить

'abc' '  a'

(вы можете удалить кавычки, очевидно).

71 голосов
/ 03 декабря 2011

Используйте это, чтобы обрезать ненужные символы:

String.substring(0, maxLength); 

Пример:

String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234" 

Чтобы убедиться, что вы не получаете исключение IndexOutOfBoundsException, когда входная строка меньше ожидаемой длины, сделайте следующее:

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);

Если вы хотите, чтобы ваши целые и двойные числа имели определенную длину, тогда я предлагаю вам использовать NumberFormat для форматирования ваших чисел, а не обрезать их строковое представление.

25 голосов
/ 05 июня 2014

Для удобства чтения я предпочитаю:

if (inputString.length() > maxLength) {
    inputString = inputString.substring(0, maxLength);
}

над принятым ответом.

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
25 голосов
/ 13 декабря 2013

Вы можете использовать статический метод Apache Commons StringUtils.substring(String str, int start, int end), который также является нулевым.

См .: http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#substring%28java.lang.String,%20int,%20int%29

и http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringUtils.html#line.1961

18 голосов
/ 16 ноября 2015

Вы можете легко добиться этого, используя

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));
2 голосов
/ 11 сентября 2015

Решение может быть java.lang.String.format("%" + maxlength + "s", string).trim(), например:

int maxlength = 20;
String longString = "Any string you want which length is greather than 'maxlength'";
String shortString = "Anything short";
String resultForLong = java.lang.String.format("%" + maxlength + "s", longString).trim();
String resultForShort = java.lang.String.format("%" + maxlength + "s", shortString).trim();
System.out.println(resultForLong);
System.out.println(resultForShort);

выход:

Any string you want w

Anything short

2 голосов
/ 03 декабря 2011

В идеале вы должны стараться не изменять внутреннее представление данных с целью создания таблицы.В чем проблема с String.format ()?Он вернет вам новую строку с необходимой шириной.

0 голосов
/ 26 июня 2019

Если вы просто хотите максимальную длину, используйте StringUtils.left!Нет if или ternary ?: необходимо.

int maxLength = 5;
StringUtils.left(string, maxLength);

Вывод:

      null -> null
        "" -> ""
       "a" -> "a"
"abcd1234" -> "abcd1"

Left Документация

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