rellenar - Cómo formatear cadenas en Java
string.format java ejemplo (6)
Eche un vistazo a String.format . Sin embargo, tenga en cuenta que se necesitan especificadores de formato similares a los de la familia de funciones printf de C, por ejemplo:
String.format("Hello %s, %d", "world", 42);
Volvería "Hello world 42". Puede encontrar this útil al aprender sobre los especificadores de formato. Andy Thomas-Cramer tuvo la amabilidad de dejar this enlace en un comentario a continuación, que parece apuntar a las especificaciones oficiales. Los más utilizados son:
- % s - inserta una cadena
- % d - insertar un entero con signo (decimal)
- % f - inserta un número real, notación estándar
Esto es radicalmente diferente de C #, que usa referencias posicionales con un especificador de formato opcional. Eso significa que no puedes hacer cosas como:
String.format("The {0} is repeated again: {0}", "word");
... sin repetir el parámetro pasado a printf / formato. (ver el comentario de Scrum Meister a continuación)
Si solo desea imprimir el resultado directamente, puede encontrar System.out.printf ( PrintStream.printf ) a su gusto.
Pregunta primitiva, pero ¿cómo formateo cadenas como esta?
"Paso {1} de {2}"
sustituyendo variables usando Java? En C # es fácil.
Esta solución funcionó para mí. Necesitaba crear URL para un cliente REST dinámicamente, así que creé este método, así que solo tiene que pasar el restURL como este
/customer/{0}/user/{1}/order
y agrega tantos params como necesites:
public String createURL (String restURL, Object ... params) {
return new MessageFormat(restURL).format(params);
}
Solo tienes que llamar a este método así:
createURL("/customer/{0}/user/{1}/order", 123, 321);
La salida
"/ cliente / 123 / usuario / 321 / orden"
He escrito mi método simple para ello:
public class SomeCommons {
/** Message Format like ''Some String {0} / {1}'' with arguments */
public static String msgFormat(String s, Object... args) {
return new MessageFormat(s).format(args);
}
}
para que pueda usarlo como:
SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");
Si elige no utilizar String.format, la otra opción es el + operador binario
String str = "Step " + a + " of " + b;
Este es el equivalente de
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Cualquiera que sea tu uso es tu elección. StringBuilder es más rápido, pero la diferencia de velocidad es marginal. Prefiero usar el operador +
(que hace un StringBuilder.append(String.valueOf(X)))
y me resulta más fácil de leer.
Además de String.format, también eche un vistazo a java.text.MessageFormat
. El formato menos escueto y un poco más cercano al ejemplo de C # que ha proporcionado y también puede usarlo para analizar.
Por ejemplo:
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));
Un ejemplo más agradable aprovecha las mejoras de varargs y autoboxing en Java 1.5 y convierte lo anterior en un juego de una sola línea:
MessageFormat.format("String is /"{1}/", number is {0}.", 42, "foobar");
MessageFormat
es un poco más agradable para hacer plurales i18nized con el modificador de elección. Para especificar un mensaje que utilice correctamente la forma singular cuando una variable es 1 y plural de lo contrario, puede hacer algo como esto:
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) });
public class StringFormat {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.println(String.format("%-15s%03d",s1,x));
}
System.out.println("================================");
}
}
outpot "============================="
ved15space123 ved15space123 ved15space123 "=============================
Solución Java
El "-" se usa para sangría izquierda
El "15" hace que la longitud mínima de la cuerda sea 15
- La "s" (que es unos pocos caracteres después de%) será sustituida por nuestro String
- El 0 rellena nuestro entero con 0 a la izquierda
- El 3 hace que nuestro número entero sea una longitud mínima de 3