Pergunta primitiva, mas como formatar seqüências de caracteres como esta:
"Etapa {1} de {2}"
substituindo variáveis usando Java? Em C # é fácil.
java
string
string-formatting
Katit
fonte
fonte
Respostas:
Além de String.format, também dê uma olhada
java.text.MessageFormat
. O formato menos conciso e um pouco mais próximo do exemplo de C # que você forneceu e pode ser usado para analisar também.Por exemplo:
Um exemplo melhor aproveita os aprimoramentos de varargs e autoboxing no Java 1.5 e transforma o anterior em uma linha:
MessageFormat
é um pouco melhor para fazer plurais i18nizados com o modificador de escolha. Para especificar uma mensagem que use corretamente a forma singular quando uma variável for 1 e plural, caso contrário, você poderá fazer algo assim:fonte
MessageFormat.format("Number {0}", 1234));
dependendo da localidade padrão, pode produzir emNumber 1,234
vez deNumber 1234
.{0} it ll take firstname
, quando{1} then lastname
, assim. É possível{0,choice,0.getFirstName()}
ou algo assim?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:
Gostaria de retornar "Olá mundo, 42". Você pode achar isso útil ao aprender sobre os especificadores de formato. Andy Thomas-Cramer teve a gentileza de deixar esse link em um comentário abaixo, o que parece apontar para as especificações oficiais. Os mais usados são:
Isso é radicalmente diferente do C #, que usa referências posicionais com um especificador de formato opcional.
Isso significa que você não pode fazer coisas como:...
sem realmente repetir o parâmetro passado para printf / format.(veja o comentário do The Scrum Meister abaixo)Se você quiser apenas imprimir o resultado diretamente, poderá encontrar System.out.printf ( PrintStream.printf ) ao seu gosto.
fonte
String.format
também pode assumir posições numéricas:String.format("%2$s %1$s", "foo", "bar");
será exibidobar foo
Se você optar por não usar String.format, a outra opção é o operador binário +
Isso é equivalente a
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
O que você usar é a sua escolha. StringBuilder é mais rápido, mas a diferença de velocidade é marginal. Prefiro usar o
+
operador (que faz umStringBuilder.append(String.valueOf(X)))
e acha mais fácil ler.fonte
+
operador funciona. 2) Sua explicação não é precisa.+
é equivalente a usarStringBuilder
, nãoString.concat
. (Way muita informação sobre isso.)Eu escrevi meu método simples para isso:
para que você possa usá-lo como:
fonte
Solução Java
O "-" é usado para recuar à esquerda
O "15" faz com que o comprimento mínimo da String seja de 15
fonte
Esta 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
e adicione quantos parâmetros você precisar:
Você apenas precisa chamar esse método assim:
A saída
fonte
Eu escrevi essa função que faz a coisa certa. Interpole uma palavra começando com
$
o valor da variável com o mesmo nome.fonte