Interpolation de variable de chaîne Java

La construction de cordes à Java me déconcerte. Je fais des choses comme:

url += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";"; url += "x=" + u1 + ";y=" + u2 + ";z=" + u3 + ";da1=" + u4 + ";"; url += "qty=1;cost=" + orderTotal + ";ord=" + orderId + "?"; 

Ou, en utilisant SsortingngBuilder, quelque chose comme ceci:

  url.append("u1="); url.append(u1); url.append(";u2="); url.append(u2); url.append(";u3="); url.append(u3); url.append(";u4="); url.append(u4); url.append(";"); url.append("x="); url.append(u1); url.append(";y="); url.append(u2); url.append(";z="); url.append(u3); url.append(";da1="); url.append(u4); url.append(";"); url.append("qty=1;"); url.append("cost="); url.append(orderTotal); url.append(";ord="); url.append(orderId); url.append("?"); 

Surement je manque quelque chose. Il doit y avoir une meilleure façon. Quelque chose comme:

Au lieu de:

 urlSsortingng += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";"; 

faire:

 urlSsortingng += Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4); 

ou:

 urlSsortingngBuilder.append(Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4)); 

Si vous utilisez Java 5 ou supérieur, vous pouvez utiliser Ssortingng.format :

 urlSsortingng += Ssortingng.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4); 

Voir Formatter pour plus de détails.

Notez qu’il n’y a pas d’interpolation de variable en Java. L’interpolation de variable est la substitution de variable avec sa valeur dans une chaîne. Un exemple en Ruby:

 #!/usr/bin/ruby age = 34 name = "William" puts "#{name} is #{age} years old" 

L’interpréteur Ruby remplace automatiquement les variables avec ses valeurs dans une chaîne. Le fait que nous allons faire une interpolation est indiqué par des caractères de sceau. Dans Ruby, c’est # {}. En Perl, cela pourrait être $,% ou @. Java n’imprimerait que de tels caractères, il ne les développerait pas.

L’interpolation des variables n’est pas prise en charge en Java. Au lieu de cela, nous avons le formatage de chaîne.

 package com.zetcode; public class SsortingngFormatting { public static void main(Ssortingng[] args) { int age = 34; Ssortingng name = "William"; Ssortingng output = Ssortingng.format("%s is %d years old.", name, age); System.out.println(output); } } 

En Java, nous construisons une nouvelle chaîne en utilisant la méthode Ssortingng.format (). Le résultat est le même, mais les méthodes sont différentes.

Voir http://en.wikipedia.org/wiki/Variable_interpolation

Juste pour append qu’il y a aussi java.text.MessageFormat avec l’avantage d’avoir des index d’arguments numériques.

Ajout du 1er exemple de la documentation

 int planet = 7; Ssortingng event = "a disturbance in the Force"; Ssortingng result = MessageFormat.format( "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.", planet, new Date(), event); 

Résultat:

 At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7. 

Ssortingng.format() à la rescousse !!

Vous pouvez utiliser Kotlin, le Java Super (cede of) pour JVM, il a un bon moyen d’interpoler des chaînes comme celles de ES5, Ruby et Python.

 class Client(val firstName: Ssortingng, val lastName: Ssortingng) { val fullName = "$firstName $lastName" }