2017-11-27 335 views
5

Mam szablon StringJava Message Formatter nie działa

xxxxxxxx xxxxx-xx: [{0}] xxxxxxx xxxxx xxxxxx xxxxxx [{1}] xxxxxx xxxx xxxxx'x xxxxx xxxxxx xxxx [{2}] 

Nawet gdybym dostarczyć wszystkie trzy argumenty nadal nie działa

public static void main(String[] args) { 
    String s = "xxxxxxxx xxxxx-xx: [{0}] xxxxxxx xxxxx xxxxxx xxxxxx [{1}] xxxxxx xxxx xxxxx'x xxxxx xxxxxx xxxx [{2}]"; 

    System.out.println(MessageFormat.format(s,"1","2","3")); 
} 

Wyjście jest:

xxxxxxxx xxxxx-xx: [1] xxxxxxx xxxxx xxxxxx xxxxxx [2] xxxxxx xxxx xxxxxx xxxxx xxxxxx xxxx [{2}] 

widoczny wyjściowy, jego wyjście {2} zamiast 3, nie mogę znaleźć, dlaczego to nie działa. Czy to błąd, czy coś mi brakuje?

+3

Zobacz dane wyjściowe. Jego wyprowadzanie {2} zamiast 3 – Makky

+0

Czy brakujący '' 'na wyjściu jest literówką lub faktycznym wyjściem? – hnefatl

+0

Jego wyjście, możesz spróbować – Makky

Odpowiedz

9

Twój problem jest w pojedynczy cudzysłów ' trzeba użyć podwójnego '' zamiast jednego:

xxxxx''x 

Przeczytaj dokumentację o pojedynczy cudzysłów (MessageFormat)

ciągu znaków , można użyć pary pojedynczych cudzysłowów, aby zacytować dowolne dowolne znaki z wyjątkiem pojedynczych cudzysłowów. Na przykład wzorzec ciągu znaków "{0}" "reprezentuje ciąg" {0} ", a nie FormatElement. Pojedynczy cudzysłów sam w sobie musi być reprezentowany przez podwójne pojedyncze cudzysłowy w całym ciągu . Na przykład ciąg wzorców "" {""} "jest interpretowany jako ciąg" {(początek cytowania i lewy nawias klamrowy) "(pojedynczy cytat z ) i} '(prawy kręcony nawias i koniec cytowania), a nie '{' i '}' (cytowane lewe i prawe nawiasy klamrowe): reprezentujące ciąg "{'}", , a nie "{}".

+0

Czy jest to coś w dokumentacji API? – Makky

2

To dlatego, że masz ' w swoim ciągu. Musisz uciec lub go brakuje.

3

To rzeczywiście apostrof, musisz uciec przed nim z innym apostrofem, takim jak: ''xxx. Jest to w dokumencie btw:

W ciągu znaków "'(dwie pojedyncze cytaty) reprezentuje pojedynczy cytat.

+0

Dzięki. Mam to ! głupi mi – Makky

+0

@Makky głupi ja też;) Całkowicie zapomniałem o tym – Eugene