Подтвердить что ты не робот

Ограничение количества символов в строке и измельчение остальных

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

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

    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

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

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

4b9b3361

Ответ 1

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

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 для форматирования ваших чисел вместо того, чтобы отрезать их строковое представление.

Ответ 2

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

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

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

'abc' '  a'

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

Ответ 3

Вы можете использовать статический метод 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

Ответ 4

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

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

по принятому ответу.

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

Ответ 5

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

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));

Ответ 6

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

Ответ 7

Решение может быть 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

Ответ 8

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

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

Выход:

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

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