ti-enxame.com

Limitando o número de caracteres em uma string e cortando o resto

Eu preciso criar uma tabela de resumo no final de um log com alguns valores que são obtidos dentro de uma classe. A tabela precisa ser impressa no formato de largura fixa. Eu tenho o código para fazer isso já, mas eu preciso limitar Strings, duplas e ints para um tamanho de largura fixa que é codificado no código.

Então, suponha que eu queira imprimir uma tabela de largura fixa com

    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.

Se um valor exceder essa largura, os últimos caracteres precisam ser cortados. Então, por exemplo:

    124891, difference, 22.348, montreal

as seqüências que precisam ser impressas devem ser:

    1248 diffe 22.348 montre

Eu estou pensando que preciso fazer algo no construtor que força uma string a não exceder um certo número de caracteres. Provavelmente vou conjurar as duplas e ints para uma string, para que eu possa impor os requisitos de largura máxima.

Eu não sei qual método faz isso ou se uma string pode ser instanciada para se comportar dessa maneira. O uso do formatador só ajuda na formatação fixa para imprimir a sequência, mas na verdade não afeta caracteres que excedem o comprimento máximo.

49
Flethuseo

Use isto para cortar os caracteres não necessários:

String.substring(0, maxLength); 

Exemplo:

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

Para garantir que você não esteja obtendo um IndexOutOfBoundsException quando a cadeia de entrada for menor que o comprimento esperado, faça o seguinte:

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

Se você quiser que seus números inteiros e duplos tenham um certo tamanho, sugiro usar NumberFormat para formatar seus números em vez de cortar sua representação de string.

71
GETah

Você também pode usar String.format("%3.3s", "abcdefgh"). O primeiro dígito é o comprimento mínimo (a cadeia será preenchida com a esquerda se for mais curta), o segundo dígito é o comprimento máximo e a cadeia será truncada se for mais longa. assim

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

vai produzir

'abc' '  a'

(você pode remover aspas, obviamente).

153
Jaksa
25
khriskooper

Por questões de legibilidade, eu prefiro isso:

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

sobre a resposta aceita.

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

Você pode conseguir isso facilmente usando

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

Idealmente, você deve tentar não modificar a representação de dados internos para criar a tabela. Qual é o problema com String.format ()? Ele retornará uma nova string com a largura necessária.

2
Ashwinee K Jha

A solução pode ser Java.lang.String.format("%" + maxlength + "s", string).trim(), assim:

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);

saída:

Any string you want w

Anything short

2
Moesio