Primitive Frage, aber wie formatiere ich Zeichenfolgen wie folgt:
"Schritt {1} von {2}"
durch Ersetzen von Variablen mit Java? In C # ist es einfach.
Primitive Frage, aber wie formatiere ich Zeichenfolgen wie folgt:
"Schritt {1} von {2}"
durch Ersetzen von Variablen mit Java? In C # ist es einfach.
Antworten:
Schauen Sie sich neben String.format auch an java.text.MessageFormat
. Das Format ist weniger knapp und liegt etwas näher an dem von Ihnen angegebenen C # -Beispiel. Sie können es auch zum Parsen verwenden.
Beispielsweise:
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));
Ein schöneres Beispiel nutzt die Verbesserungen von Varargs und Autoboxing in Java 1.5 und verwandelt das oben Genannte in einen Einzeiler:
MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");
MessageFormat
ist ein bisschen schöner, wenn man mit dem Auswahlmodifikator i18nisierte Pluralformen macht. Um eine Nachricht anzugeben, die die Singularform korrekt verwendet, wenn eine Variable 1 und ansonsten Plural ist, können Sie Folgendes tun:
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) });
MessageFormat.format("Number {0}", 1234));
abhängig vom Standardgebietsschema Number 1,234
anstelle von erzeugt werden Number 1234
.
{0} it ll take firstname
, wann {1} then lastname
, wie so. Ist es so {0,choice,0.getFirstName()}
oder so möglich ?
Schauen Sie sich String.format an . Beachten Sie jedoch, dass Formatbezeichner erforderlich sind, die denen der printf-Funktionsfamilie von C ähnlich sind - zum Beispiel:
String.format("Hello %s, %d", "world", 42);
Würde "Hallo Welt, 42" zurückgeben. Sie können feststellen , diese hilfreich , wenn man über den Formatbezeich lernen. Andy Thomas-Cramer war so freundlich, diesen Link in einem Kommentar unten zu hinterlassen , der auf die offizielle Spezifikation zu verweisen scheint. Die am häufigsten verwendeten sind:
Dies unterscheidet sich grundlegend von C #, bei dem Positionsreferenzen mit einem optionalen Formatbezeichner verwendet werden. Das bedeutet, dass Sie Dinge wie:
String.format("The {0} is repeated again: {0}", "word");
... ohne den an printf / format übergebenen Parameter tatsächlich zu wiederholen. (siehe den Kommentar von The Scrum Meister unten)
Wenn Sie das Ergebnis nur direkt drucken möchten, finden Sie möglicherweise System.out.printf ( PrintStream.printf ) nach Ihren Wünschen.
String.format
kann auch numerische Positionen einnehmen: String.format("%2$s %1$s", "foo", "bar");
wird ausgegebenbar foo
Wenn Sie String.format nicht verwenden, ist die andere Option der binäre Operator +
String str = "Step " + a + " of " + b;
Dies entspricht
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Was auch immer Sie verwenden, ist Ihre Wahl. StringBuilder ist schneller, aber der Geschwindigkeitsunterschied ist gering. Ich bevorzuge die Verwendung des +
Operators (der a ausführt StringBuilder.append(String.valueOf(X)))
und es leichter zu lesen findet.
+
Operator funktioniert. 2) Ihre Erklärung ist nicht einmal richtig. +
ist gleichbedeutend mit verwenden StringBuilder
, nicht String.concat
. (Viel zu viele Informationen dazu.)
Ich habe meine einfache Methode dafür geschrieben:
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);
}
}
Sie können es also verwenden als:
SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");
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 "=========== =====================
Java-Lösung
Das "-" wird verwendet, um den Einzug zu verlassen
Die "15" bewirkt, dass die Mindestlänge des Strings 15 beträgt
Diese Lösung hat bei mir funktioniert. Ich musste URLs für einen REST-Client dynamisch erstellen, also habe ich diese Methode erstellt, sodass Sie die restURL nur so übergeben müssen
/customer/{0}/user/{1}/order
und fügen Sie so viele Parameter hinzu, wie Sie benötigen:
public String createURL (String restURL, Object ... params) {
return new MessageFormat(restURL).format(params);
}
Sie müssen diese Methode nur so aufrufen:
createURL("/customer/{0}/user/{1}/order", 123, 321);
Die Ausgabe
"/ customer / 123 / user / 321 / order"
Ich habe diese Funktion geschrieben, sie macht genau das Richtige. Interpolieren Sie ein Wort, das mit $
dem Wert der gleichnamigen Variablen beginnt .
private static String interpol1(String x){
Field[] ffield = Main.class.getDeclaredFields();
String[] test = x.split(" ") ;
for (String v : test ) {
for ( Field n: ffield ) {
if(v.startsWith("$") && ( n.getName().equals(v.substring(1)) )){
try {
x = x.replace("$" + v.substring(1), String.valueOf( n.get(null)));
}catch (Exception e){
System.out.println("");
}
}
}
}
return x;
}