Załóżmy, że masz literał String zawierający wiele cudzysłowów. Mógłbyś uciec od nich wszystkich, ale jest to ból i trudne do odczytania.
W niektórych językach możesz po prostu to zrobić:
foo = '"Hello, World"';
Jednak w Javie ''
jest używany dla char
s, więc nie możesz go używać w String
ten sposób. Niektóre języki mają składnię, aby to obejść. Na przykład w pythonie możesz to zrobić:
"""A pretty "convenient" string"""
Czy Java ma coś podobnego?
System.out.println(mapperObj.writeValueAsString(mapperObj.readValue(str, Object.class)));
Odpowiedzi:
Odpowiedź brzmi nie, a dowód znajduje się w specyfikacji języka Java :
Jak widać,
StringLiteral
może być po prostu związany"
i nie może zawierać znaków specjalnych bez znaków specjalnych.Na marginesie: możesz osadzić Groovy w swoim projekcie, to rozszerzy składnię Java, umożliwiając korzystanie z niej
'''multi line string '''
,' "string with single quotes" '
a także"string with ${variable}"
.źródło
Nie, i zawsze denerwował mnie brak różnych składni w języku Java.
Oto sztuczka, której używam od czasu do czasu:
Robię coś takiego głównie dla pola statycznego. Ponieważ jest statyczny, kod zastępujący ciąg jest wywoływany raz, podczas inicjalizacji klasy. Tak więc spadek wydajności w czasie wykonywania praktycznie nie istnieje, a kod jest znacznie bardziej czytelny.
źródło
Aktualizacja grudzień 2018 (12 miesięcy później):
Surowe literały ciągów (które są na bursztynowej liście ) nie dotrą do JDK 12.
Zobacz krytykę tutaj .
Może istnieć w przyszłej wersji Java (10 lub więcej).
Zobacz JEPS 8196004 ze stycznia 2018 r .: ( „JEP” to „Program ulepszeń JDK” )
Więc zamiast:
Możesz wpisać:
Schludny!
Ale to wciąż jest tylko szkic : będzie musiał zostać wysłany, przesłany, być kandydatem i sfinansowany, zanim zostanie ukończony i trafi do następnego JDK.
źródło
Prosta odpowiedź: nie.
W przypadku dłuższych ciągów znaków, których należy unikać, zwykle czytam je z jakiegoś zewnętrznego źródła.
źródło
możesz także użyć StringEscapeUtils z apache commons
AKTUALIZACJA : Jeśli ktoś jest zainteresowany kilkoma przykładami, to przydatny link: https://dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
źródło
String
s, więc nie ma możliwości umieszczenia w kodzie ładnie sformatowanej wartości. Przypuszczalnie można by użyć tych metod do odczytu z pliku do aString
, ale nie sądzę, aby o to tutaj chodziło.Wydaje mi się, że działa dla mnie:
Myślę, że ponieważ char jest pierwotnym typem zmiennej dla ciągu znaków, można łączyć ciągi znaków i znaki (przynajmniej kompilator eclipse nie wydaje się narzekać).
źródło
Jeśli chcesz uciec
'
lub"
w swoim ciągu, możesz użyć następującego kodu:źródło