2009-10-19 12 views
264

muszę złączyć te dwa ciągi z moich zasobów plików/wartość:Jak zachować spacje na końcu i/lub na początku łańcucha?

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string> 
<string name="Toast_Memory_GameWon_part2"> flips !</string> 

zrobić to w ten sposób:

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2); 

Toast.makeText(this, message_all_pairs_found, 1000).show(); 

ale spacje na końcu pierwszego ciągu, a na początku drugiego ciągu znaków zniknęły (gdy pojawi się toast) ...

Co należy zrobić?

Myślę, że odpowiedź jest gdzieś tutaj, w tym documentation link

czy jest to coś jak przy użyciu &amp ; dla znaku „&” ??

+2

Jest kilka dobrych odpowiedzi, ale żadna z nich nie działa dla mnie (zobacz moje komentarze). Nagroda za odpowiedź, która zapewnia sposób na uzyskanie prawdziwego znaku przestrzeni (U + 0020) jako pierwszego lub ostatniego znaku zasobu ciągów. – Thomas

+1

Paskudny nasty android :( –

Odpowiedz

390

Nawet jeśli użyć formatowania ciąg, czasami trzeba jeszcze spacji na początku lub na końcu łańcucha. W takich przypadkach pomocne nie jest ani unikanie atrybutu \, ani xml:space. Musisz użyć encji HTML &#160; dla białych znaków.

Użyj &#160; dla niełamliwych białych znaków.
Użyj zwykłego miejsca, aby uzyskać &#032;.

+11

Ten * rodzaj * działa, ale wstawia przestrzeń nie łamiącą się (U + 00A0) zamiast zwykłej przestrzeni, co może być niepożądane w niektórych sytuacjach – Thomas

+0

Do testowania na instan ce, to kompletny bałagan! – Snicolas

+29

& 160 nie działa ... edytor xml daje błąd i nie można zbudować projektu ... \ u0020 działa dobrze! – Camacho

0

Nie mam pojęcia o systemie Android w szczególności, ale wygląda to jak zwykła obsługa białych znaków XML - początkowe i końcowe spacje w elemencie są generalnie uważane za nieznaczące i usuwane. Spróbuj xml:space:

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string> 
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string> 
+0

Niestety, 'xml: space' wydaje się być ignorowany – Thomas

-6

To nie działa z xml: space = "zachować"

więc zrobiłem to najszybszy sposób =>

po prostu dodaje się +”„+ gdzie potrzebne to ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2); 
+1

Jaki jest sens korzystania z zasobów w ogóle, jeśli zamierzasz miksować w niektórych literałach napisanych w Javie? –

8

Jeśli naprawdę chcesz to zrobić tak, jak robili to myślę, że trzeba powiedzieć to, że spacje są istotne uciekając go:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string> 
<string name="Toast_Memory_GameWon_part2">\ flips !</string> 

Do tego jednak użyłbym string formatting. Coś jak następuje:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string> 

następnie

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips); 
+1

Uciekanie z odwrotnym ukośnikiem nie działa (przynajmniej dla mnie) .Stosowanie ciągu formatów jest ogólnie dobrym rozwiązaniem, ale nie zawsze, na przykład 'String.format' powoduje wiele przydziałów pamięci, które są niepożądane w grze – Thomas

+0

wymazanie spacji (użycie" \ ") nie działa też dla mnie, –

+0

Formatowanie działa tylko wtedy, gdy twój tekst jest wyświetlany w tym samym stylu, w moim przypadku 2 połączone rzeczy są pogrubione w porównaniu do normalnych i różnych kolorów –

365

Wpadłem na ten sam problem. Chciałem zostawić puste miejsce na końcu łańcucha zasobów reprezentującego nazwę pola na ekranie.

znalazłem rozwiązanie tego raportu problem: https://github.com/iBotPeaches/Apktool/issues/124

jest to ten sam pomysł, że Duessi sugeruje. Wstaw \u0020 bezpośrednio w pliku XML, aby zachować puste miejsce, które chcesz zachować.

Przykład:

<string name="your_id">Score :\u0020</string> 

Wymiana odbywa się w czasie kompilacji, dlatego nie wpłynie na wydajność gry.

+2

Ładne, działa jak czar! Dzięki! – Thomas

+3

FYI,   działa również – HXCaine

+0

działa świetnie. Zastanawiam się, jaka jest różnica między używaniem go a   –

95

Ten documentation sugeruje przytoczyć zadziała:

<string name="my_str_spaces">" Before and after? "</string> 
+2

Czy to gwarantuje '" Przed i po? "' – Prateek

+4

To bardziej niż użycie znaków Unicode! Dzięki! –

+1

Niestety niektóre narzędzia lokalizacyjne, takie jak Passolo, automatycznie dodają slash przed cytatem. Ciąg staje się tym: \ "Przed i po? \". Dlatego te cytaty pojawiają się w tekście. Więc używanie w tym przypadku wydaje się lepsze. – Fox

1

wszystkie odpowiedzi tutaj nie działa dla mnie. Zamiast tego, aby wprowadzić spację na końcu łańcucha w XML Zrobiłem to

<string name="more_store">more store<b> </b> </string> 
+0

To działa! Dzięki. – 1111161171159459134

4

Jest to możliwe do przestrzeni o różnej szerokości:

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string> 

| PRZESTRZEŃ | CIENKA PRZESTRZEŃ PRZESTRZEŃ WŁOSÓW bez spacji

Wizualizacja:

enter image description here

1

Argumentem może być wykonane do dodawania programowo przestrzeń. Ponieważ te przypadki będą często używane w konkatenacjach, postanowiłem zatrzymać szaleństwo i po prostu zrobić stare + " " +. Mają one sens w większości językach europejskich, chciałbym zebrać.

31

Po prostu używam kodu UTF dla spacji "\ u0020" w pliku strings.xml.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string> 

działa świetnie. (Android kocha kody UTF)

+2

To działało dla mnie, gdy przyjęta odpowiedź nie była. – Lance

+0

Czy jest coś nowego w [istniejącej odpowiedzi] (https://stackoverflow.com/a/3862065/905686)? – user905686

5

użyj "" z wartością ciągu znaków.

przykład: "wartość z przestrzeni"

lub

zastosowanie \ kodu u0020 dla przestrzeni.

Powiązane problemy