Przechowuję zapytanie SQL w moim pliku strings.xml i chcę użyć go String.Format
do zbudowania ostatniego ciągu w kodzie. W SELECT
oświadczeniu używa się czegoś podobnego:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'
Aby sformatować, zamieniam „coś” na% 1 $ s, aby stało się:
SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'
Unikam pojedynczych cudzysłowów odwrotnym ukośnikiem. Nie jestem jednak w stanie uciec od znaku%.
Jak mogę dołączyć podobną instrukcję do mojego pliku strings.xml?
String.format()
możesz rozważyć użycieMessageFormat()
zamiast niego.Odpowiedzi:
Uciec
%
, trzeba będzie podwoić go:%%
.źródło
Aby uzupełnić poprzednie podane rozwiązanie, użyj:
źródło
Jest to silniejsze zastępowanie wyrażeń regularnych, które nie zastąpi %%, które są już podwojone w danych wejściowych.
źródło
Oto opcja, jeśli musisz uciec wielu% w ciągu, a niektóre już uciekły.
Aby zdezynfekować wiadomość przed przekazaniem jej do String.format, możesz użyć następujących
Działa to z dowolną liczbą znaków formatujących, więc zastąpi%%%, %%% z %%%%, %%%%% z %%%%%% itp.
Pozostawi już wszelkie znaki, które uciekły w spokoju (np. %%, %%%% itp.)
źródło