Prymitywne pytanie, ale jak sformatować ciągi takie jak to:
„Krok {1} z {2}”
przez podstawienie zmiennych za pomocą Java? W języku C # jest to łatwe.
java
string
string-formatting
katit
źródło
źródło
Odpowiedzi:
Oprócz String.format również spójrz
java.text.MessageFormat
. Format mniej zwięzły i nieco bliższy podanemu przez Ciebie przykładowi C # i możesz go również użyć do analizy.Na przykład:
Lepszy przykład wykorzystuje ulepszenia varargs i autoboxing w Javie 1.5 i zamienia powyższe w jedno-liniowy:
MessageFormat
jest trochę ładniejszy do robienia liczby mnogiej i18niz z modyfikatorem wyboru. Aby określić komunikat, który poprawnie używa liczby pojedynczej, gdy zmienna ma wartość 1, a w innym przypadku liczby mnogiej, możesz zrobić coś takiego:źródło
MessageFormat.format("Number {0}", 1234));
możnaNumber 1,234
zamiast tego wygenerować następujący kod w zależności od domyślnych ustawień regionalnychNumber 1234
.{0} it ll take firstname
, kiedy{1} then lastname
, tak. Czy to możliwe,{0,choice,0.getFirstName()}
czy coś takiego?Spójrz na String.format . Należy jednak pamiętać, że pobiera specyfikatory formatu podobne do tych z rodziny funkcji printf C - na przykład:
Zwróciłby „Hello world, 42”. Może ci się to przydać podczas poznawania specyfikatorów formatu. Andy Thomas-Cramer był na tyle miły, że zostawił ten link w komentarzu poniżej, który wydaje się wskazywać na oficjalną specyfikację. Najczęściej używane to:
Jest to diametralnie różne od C #, który wykorzystuje odwołania pozycyjne z opcjonalnym specyfikatorem formatu.
Oznacza to, że nie możesz robić takich rzeczy jak:...
bez faktycznego powtarzania parametru przekazanego do printf / format.(patrz komentarz Scrum Meister poniżej)Jeśli chcesz wydrukować wynik bezpośrednio, możesz znaleźć System.out.printf ( PrintStream.printf ) według własnych upodobań.
źródło
String.format
może również zajmować pozycje numeryczne:String.format("%2$s %1$s", "foo", "bar");
wyświetlibar foo
Jeśli zdecydujesz się nie używać String.format, drugą opcją jest + operator binarny
Jest to odpowiednik
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Niezależnie od tego, którego używasz, to twój wybór. StringBuilder jest szybszy, ale różnica prędkości jest znikoma. Wolę używać
+
operatora (który robiStringBuilder.append(String.valueOf(X)))
i łatwiej go czytać).źródło
+
działa operator. 2) Twoje wyjaśnienie nie jest nawet dokładne.+
jest równoważne z używaniemStringBuilder
, a nieString.concat
. (Zbyt wiele informacji na ten temat.)Napisałem do tego moją prostą metodę:
dzięki czemu możesz użyć go jako:
źródło
Rozwiązanie Java
„-” służy do opuszczania wcięcia
„15” oznacza, że minimalna długość ciągu to 15
źródło
To rozwiązanie działało dla mnie. Musiałem dynamicznie tworzyć adresy URL dla klienta REST, więc utworzyłem tę metodę, więc po prostu musisz przekazać restURL w ten sposób
i dodaj tyle parametrów, ile potrzebujesz:
Musisz tylko wywołać tę metodę w następujący sposób:
Wyjście
źródło
Napisałem tę funkcję, robi to właściwie. Interpoluj słowo zaczynające się
$
od wartości zmiennej o tej samej nazwie.źródło