Pregunta primitiva, pero ¿cómo puedo formatear cadenas como esta:
"Paso {1} de {2}"
mediante la sustitución de variables con Java? En C # es fácil.
java
string
string-formatting
katit
fuente
fuente
Respuestas:
Además de String.format, también eche un vistazo
java.text.MessageFormat
. El formato es menos conciso y un poco más cercano al ejemplo de C # que ha proporcionado, y también puede usarlo para analizar.Por ejemplo:
Un mejor ejemplo aprovecha las mejoras de varargs y autoboxing en Java 1.5 y convierte lo anterior en una línea:
MessageFormat
es un poco más agradable para hacer plurales i18nized con el modificador de elección. Para especificar un mensaje que usa correctamente la forma singular cuando una variable es 1 y plural, de lo contrario, puede hacer algo como esto:fuente
MessageFormat.format("Number {0}", 1234));
según la configuración regional predeterminada, puede producir enNumber 1,234
lugar deNumber 1234
.{0} it ll take firstname
, cuándo{1} then lastname
, así. ¿Es posible{0,choice,0.getFirstName()}
o algo así?Echa un vistazo a String.format . Sin embargo, tenga en cuenta que toma especificadores de formato similares a los de la familia de funciones printf de C, por ejemplo:
Volvería "Hola mundo, 42". Usted puede encontrar este útil al aprender sobre los especificadores de formato. Andy Thomas-Cramer tuvo la amabilidad de dejar este enlace en un comentario a continuación, que parece apuntar a la especificación oficial. Los más utilizados son:
Esto es radicalmente diferente de C #, que utiliza referencias posicionales con un especificador de formato opcional.
Eso significa que no puedes hacer cosas como:...
sin repetir realmente el parámetro pasado a printf / format.(Ver el comentario de The Scrum Meister a continuación)Si solo desea imprimir el resultado directamente, puede encontrar System.out.printf ( PrintStream.printf ) a su gusto.
fuente
String.format
también puede tomar posiciones numéricas:String.format("%2$s %1$s", "foo", "bar");
saldrábar foo
Si elige no usar String.format, la otra opción es el operador + binario
Este es el equivalente de
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Cualquiera que uses es tu elección. StringBuilder es más rápido, pero la diferencia de velocidad es marginal. Prefiero usar el
+
operador (que hace unStringBuilder.append(String.valueOf(X)))
y me resulta más fácil de leer.fuente
+
operador. 2) Tu explicación ni siquiera es precisa.+
es equivalente a usarStringBuilder
, noString.concat
. (Demasiada información sobre esto.)He escrito mi método simple para ello:
para que puedas usarlo como:
fuente
Solución Java
El "-" se utiliza para dejar sangría
El "15" hace que la longitud mínima de la cadena sea de 15
fuente
Esta solución funcionó para mí. Necesitaba crear URL para un cliente REST dinámicamente, así que creé este método, por lo que solo tiene que pasar el restURL de esta manera
y agregue tantos parámetros como necesite:
Solo tiene que llamar a este método así:
La salida
fuente
Escribí esta función, hace lo correcto. Interpolar una palabra que comience con
$
el valor de la variable del mismo nombre.fuente