Java - Incluindo variáveis ​​nas strings?


114

Ok, então todos devemos saber que você pode incluir variáveis ​​em strings fazendo:

String string = "A string " + aVariable;

Existe uma maneira de fazer isso:

String string = "A string {aVariable}";

Ou seja: Sem ter que fechar aspas e adicionar sinais de mais. É muito pouco atraente.


10
@Chandra Por favor, não pergunte o porquê, mas sim explique se possível. É assim que eu prefiro fazer. Obrigado.
Gray Adams

3
Use o Groovy, então você poderá fazer "A string $ {aVariable}" tudo o que quiser.
Kaleb Brasee

2
Há uma grande variedade de técnicas para coisas semelhantes discutidas nesta questão , mas String.format()está embutido na linguagem.
ig0774

@KalebBrasee Parece perfeito, mas sempre fico hesitante quando se trata de modificar idiomas. Eu não quero me atrasar.
Gray Adams

1
@GrayAdams Groovy não te deixa para trás, te deixa livre! : D
Kaleb Brasee

Respostas:


124

Você sempre pode usar String.format (....). ie,

String string = String.format("A String %s %2d", aStringVar, anIntVar);

Não tenho certeza se isso é atraente o suficiente para você, mas pode ser muito útil. A sintaxe é a mesma para printf e java.util.Formatter. Eu o usei muito, especialmente se quiser mostrar dados numéricos tabulares.


2
Eu sei que isso é uma questão de opinião, mas não vejo como formaté mais atraente do que uma simples expressão de concatenação de String. Quando formatvocê precisa fazer preenchimento, formatação de números, etc.
Stephen C

1
@StephenC: Não discordo absolutamente de você. Mas é uma alternativa útil para a formatação de String, especialmente quando precisa fazer o preenchimento como você disse e como eu disse acima (ou seja, para mostrar dados numéricos tabulares). Usei-o bastante para formatar relatórios de química do sangue e resultados de CBC.
Hovercraft Full Of Eels

@StephenC Gosto do formato por alguns motivos: primeiro de tudo, '% d' usa o delimitador de linha da plataforma. Em segundo lugar, você pode encontrar facilmente todas as variáveis ​​no final. Você pode reformatar facilmente ou até mesmo reordenar as variáveis ​​inseridas. É mais fácil evitar erros (como 1 + "oops"), especialmente se você usar FindBugs (que analisa strings de formato e parâmetros de entrada). E, como diz o autor da pergunta, em muitos casos é mais legível. Claro, é uma pena que o formatmétodo tenha se tornado estático, isso foi um erro de design bastante estúpido.
Maarten Bodewes

@owlstead - "Claro, é uma pena que o método de formatação tenha se tornado estático, isso foi um erro de design bastante estúpido." . Hã? Como se formatrelacionaria com a string de destino? Certamente você não está sugerindo que devemos escrever "A String %s %2d".format(aStringVar, anIntVar)... está?
Stephen C

1
@owlstead - "asFormat" não seria correto. Isso implica que o método está criando e retornando um objeto de formato.
Stephen C

70

Isso é chamado de interpolação de string; não existe como tal em Java.

Uma abordagem é usar String.format:

String string = String.format("A string %s", aVariable);

Outra abordagem é usar uma biblioteca de modelos, como Velocity ou FreeMarker .


38

Considere também java.text.MessageFormat, que usa uma sintaxe relacionada com índices de argumentos numéricos. Por exemplo,

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

resulta em stringconter o seguinte:

A string of ponies.

Mais comumente, a classe é usada para sua formatação numérica e temporal. Um exemplo de JFreeChartformatação de etiqueta é descrito aqui ; a classe RCInfoformata o painel de status de um jogo.


1
Para alguém que vem de CSharp, essa maneira é mais direta, pois é semelhante a string.Format em C #.
Mojtaba

0

você pode usar o formato String para incluir variáveis ​​dentro de strings

Eu uso este código para incluir 2 variáveis ​​na string:

String myString = String.format ("esta é minha string% s% 2d", variable1Name, variable2Name);

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.