2012-08-26 6 views
22

Estoy seguro de que he visto String.format utilizarse como esto antes:cadena de formato correcto para String.Format o similares

String.format("Some {1}, {2}, {3}", var1, var2, var3); 

¿Esto suena de nada para nadie? Tal vez estoy pensando en C#, ¿hay alguna manera de lograr lo mismo en Java?

Sé que usted puede hacer algo como:

String.format("Some %s, %d, %s", aString, aNumber, aString) 

pero la sintaxis que busco es para la ex ...

+0

puede por favor elaborar su qustion un poco? –

Respuesta

30

Lo que está buscando es MessageFormat, que utiliza un formato dado y parámetros de entrada, p.

MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3); 

Y como ya se ha mencionado, String.format todavía puede hacer el trabajo utilizando la sintaxis alternativa, pero es menos potente en la funcionalidad y no lo ha solicitado.

+1

Hice algunas investigaciones: String.format es en realidad más nuevo que MessageFormat. Usan diferentes métodos debajo del capó pero no difieren mucho en la funcionalidad general. Se dice que String.format es más rápido. –

+0

Agradable. Existe en Android también. Una forma muy simple de formatear. No es necesario proporcionar el tipo de entrada es una ventaja. –

10

Sí, esa es la típica format cadena de C# . En Java, puede usar el último, es decir, String.format("%s %d %d", ...).

Una alternativa es utilizar MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3), que utiliza el rizado .NET tirantes notación, como se ha mencionado por @Tobias, aunque requiere que importar java.text.MessageFormat. También son más apropiados para cuando se trata de recursos localizados, donde normalmente tiene archivos externos .properties con mensajes en el formato Error {0} ocurred due to {1}.

3

No me gusta especificar tanto el índice de parámetro como su tipo, principalmente al lanzar una excepción y preparar un mensaje para ella. Me gusta el camino SLF4j lo hace. Así que envuelto org.slf4j.helpers.MessageFormatter así:

public static String subst(String string, Object...objects) { 
    return MessageFormatter.arrayFormat(string, objects).getMessage(); 
} 

A continuación, se puede utilizar de esta manera:

public void main(String[] args) { 
    throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b)); 
} 
Cuestiones relacionadas