values - test string format java online




Como formatar strings em Java (4)

Pergunta primitiva, mas como faço para formatar strings como esta:

"Etapa {1} de {2}"

substituindo variáveis ​​usando Java? Em C # é fácil.


Dê uma olhada no String.format . Observe, no entanto, que são necessários especificadores de formato semelhantes aos da família de funções printf de C - por exemplo:

String.format("Hello %s, %d", "world", 42);

Retornaria "Olá mundo, 42". Você pode achar this útil ao aprender sobre os especificadores de formato. Andy Thomas-Cramer teve a gentileza de deixar this link em um comentário abaixo, que parece apontar para a especificação oficial. Os mais usados ​​são:

  • % s - insere uma string
  • % d - insere um número inteiro assinado (decimal)
  • % f - insere um número real, notação padrão

Isso é radicalmente diferente de C #, que usa referências posicionais com um especificador de formato opcional. Isso significa que você não pode fazer coisas como:

String.format("The {0} is repeated again: {0}", "word");

... sem realmente repetir o parâmetro passado para printf / format. (veja o comentário do Scrum Meister abaixo)

Se você quiser apenas imprimir o resultado diretamente, você pode encontrar o System.out.printf ( PrintStream.printf ) ao seu gosto.


Essa solução funcionou para mim. Eu precisava criar URLs para um cliente REST dinamicamente, então criei esse método, então você só precisa passar o restURL assim

/customer/{0}/user/{1}/order

e adicione quantos parâmetros você precisar:

public String createURL (String restURL, Object ... params) {       
    return new MessageFormat(restURL).format(params);
}

Você só precisa chamar esse método assim:

createURL("/customer/{0}/user/{1}/order", 123, 321);

A saída

"/ cliente / 123 / usuário / 321 / pedido"


Se você optar por não usar String.format, a outra opção será o operador binário +

String str = "Step " + a + " of " + b;

Isso é o equivalente a

new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));

O que você usa é a sua escolha. O StringBuilder é mais rápido, mas a diferença de velocidade é marginal. Eu prefiro usar o operador + (que faz um StringBuilder.append(String.valueOf(X))) e achar mais fácil de ler.


Além de String.format, também dê uma olhada em java.text.MessageFormat . O formato menos breve e um pouco mais próximo do exemplo do C # que você forneceu e você pode usá-lo para analisar também.

Por exemplo:

int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));

Um exemplo melhor aproveita as melhorias varargs e autoboxing no Java 1.5 e transforma o acima em um one-liner:

MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");

MessageFormat é um pouco mais legal para fazer plurais individualizados com o modificador de escolha. Para especificar uma mensagem que usa corretamente o formulário singular quando uma variável é 1 e plural, você pode fazer algo assim:

String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });






string-formatting