अंत और / या एक स्ट्रिंग की शुरुआत में रिक्त स्थान कैसे रखें?


358

मुझे अपने संसाधन / मान फ़ाइलों से इन दो तारों को जोड़ना है:

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

मैं इसे इस तरह से करता हूं:

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();

लेकिन पहली स्ट्रिंग के अंत में और दूसरी स्ट्रिंग की शुरुआत में रिक्त स्थान गायब हो गए हैं (जब टोस्ट दिखाया गया है) ...

मुझे क्या करना चाहिए ?

मुझे लगता है कि इस प्रलेखन लिंक में उत्तर कहीं है

या यह &amp ;"और" चरित्र के लिए उपयोग करने जैसा कुछ है ??


2
कुछ अच्छे उत्तर हैं, लेकिन उनमें से कोई भी मेरे लिए काम नहीं करता है (मेरी टिप्पणी देखें)। इनाम किसी भी उत्तर के लिए है जो स्ट्रिंग संसाधन के पहले या अंतिम चरित्र के रूप में एक वास्तविक स्थान चरित्र (U + 0020) प्राप्त करने का एक तरीका प्रदान करता है।
थॉमस

3
गंदा बुरा Android :(
व्लाद Spreys

जवाबों:


501

यहां तक ​​कि अगर आप स्ट्रिंग प्रारूपण का उपयोग करते हैं, तो भी कभी-कभी आपको अपने स्ट्रिंग की शुरुआत या अंत में सफेद रिक्त स्थान की आवश्यकता होती है। इन मामलों के लिए, न तो साथ भागने, न \ही xml:spaceविशेषता मदद करती है। आपको &#160;व्हाट्सएप के लिए HTML इकाई का उपयोग करना चाहिए ।

&#160;नॉन-ब्रेकेबल व्हाट्सएप के लिए उपयोग करें । नियमित स्थान के लिए
उपयोग करें &#032;


12
इस तरह के काम करता है, लेकिन यह एक नियमित स्थान के बजाय एक गैर-ब्रेकिंग स्पेस (U + 00A0) सम्मिलित करता है। यह कुछ स्थितियों में अवांछनीय हो सकता है।
थॉमस

50
& # 160 काम नहीं करता ... xml संपादक एक त्रुटि देता है और आप प्रोजेक्ट का निर्माण नहीं कर सकते ... \ u0020 ठीक काम करता है!
jcamacho

10
आपको अंत में सेमी कोलोन (;) जोड़ना होगा।
user1010160

36
\ u0020 आमतौर पर बेहतर समाधान है। & # 032; आवश्यकता है कि आप html को पार्स कर सकते हैं और कुछ मामलों में बेतरतीब ढंग से अनदेखा किया जा सकता है जिसके परिणामस्वरूप कोई स्थान नहीं है
हेडनकै जूल

5
एंड्रॉइड स्टूडियो 3.2 पर एक एपीआई 25 एमुलेटर की तैनाती, मैंने उपयोग किया &#032;, और मुझे कोई बिल्ड त्रुटि नहीं मिली, लेकिन मेरे स्थान को अभी भी अनदेखा किया गया था। &#160;काम किया है, लेकिन मैं एक न टूटने वाला व्हाट्सएप नहीं चाहता। मुझे बस एक नियमित स्थान चाहिए। \u0020काम किया।
हीथ बॉर्डर्स

489

मैं उसी मुद्दे में भाग गया। मैं ऑन-स्क्रीन फ़ील्ड नाम का प्रतिनिधित्व करने वाले संसाधन स्ट्रिंग के अंत में एक रिक्त छोड़ना चाहता था।

मुझे इस मुद्दे की रिपोर्ट पर एक समाधान मिला: https://github.com/iBotPeaches/Apktool/issues/124

यह वही विचार है जो ड्यूसी सुझाव देता है। \u0020XML में सीधे उस रिक्त स्थान के लिए सम्मिलित करें जिसे आप संरक्षित करना चाहते हैं।

उदाहरण :

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

प्रतिस्थापन का निर्माण समय पर किया जाता है, इसलिए यह आपके खेल के प्रदर्शन को प्रभावित नहीं करेगा।


बहुत अच्छा काम करता है। आश्चर्य है कि इसका उपयोग करने में क्या अंतर है & # 160;
एंड्रॉयड डेवलपर

3
@androiddeveloper, \ u एक यूनिकोड चरित्र को एक एस्केप सीक्वेंस के रूप में इंगित करता है (फ़ाइल में सीधे यूनिकोड वर्ण नहीं)। & # NNN; एक HTML इकाई को इंगित करता है, जिसका अर्थ है कि आप अपने xml स्ट्रिंग पर निर्भर हैं जिसे html पार्स किया जा रहा है (यह पाठ के विचारों में उपयोग होने पर डिफ़ॉल्ट रूप से होता है)। देखें w3schools.com/html/html_entities.asp
greg7gkb

@ greg7gkb दिलचस्प है, लेकिन मुझे नहीं पता था कि यह डिफ़ॉल्ट रूप से है। आपका मतलब है कि अगर मैं स्ट्रिंग संसाधन पर "सेटटेक्स्ट" का उपयोग करता हूं, तो यह वही काम करेगा?
Android डेवलपर

@androiddeveloper हाँ, मैंने अभी कोड में इसकी पुष्टि की है। आपकी स्ट्रिंग्स xml फ़ाइल में html एंटिटीज हो सकती हैं और उन्हें डिफ़ॉल्ट रूप से सेटटैक्स (int resId) के साथ बदल दिया जाएगा। उदाहरण: <string name = "test"> T & # 160; S & # 160; T & # 160; </ string>।
greg7gkb

5
\u0020ASCII कोड का स्थान है। यह मेरी परियोजना के लिए सबसे अच्छा विकल्प था क्योंकि मुझे यह सुनिश्चित करना था कि यह एएससीआईआई था।
OneWorld

138

यह दस्तावेज़ बताता है कि उद्धृत करने से काम चलेगा:

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

2
क्या यह गारंटी देता है<string name="my_str_spaces">" Before <b>and</b> after? "</string>
प्रेटेक

5
यूनिकोड वर्णों का उपयोग करने की तुलना में यह अधिक पसंद है! धन्यवाद!
सुमित अनंतवार

2
दुर्भाग्य से कुछ स्थानीयकरण उपकरण, जैसे पासोलो, स्वचालित रूप से उद्धरण से पहले स्लैश जोड़ता है। और स्ट्रिंग यह बन जाता है: <string name = "my_str_spaces"> \ "पहले और बाद में? \" </ String>। इसलिए, यह उद्धरण पाठ में दिखाई देता है। तो इस मामले में \ u0020 का उपयोग करना बेहतर प्रतीत होता है।
फॉक्स

मैं इस दस्तावेज में कहीं भी उल्लेख नहीं है। निकटतम मैं देख सकता हूं Enclose the entire string in double quotes ("This'll work", for example)कि यह कहां भागने की चर्चा करता है Single quote (')
हीथ बॉर्डर

यह मेरे लिए काम नहीं करता है
जेम्स रिओर्डन

38

मैं स्ट्रिंग्स.xml फ़ाइल में स्पेस "\ u0020" के लिए यूटीएफ कोड का उपयोग करता हूं।

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

बहुत अच्छा काम करता है। (Android को UTF कोड पसंद हैं)


2
यह मेरे लिए काम किया जहां स्वीकृत उत्तर नहीं था।
लांस

1
क्या मौजूदा जवाब में कुछ नया है ?
user905686

21

यह प्रश्न पुराना हो सकता है, लेकिन अब तक का सबसे आसान तरीका उद्धरण चिह्नों को जोड़ना है। उदाहरण के लिए:

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

यह पूरी तरह से काम करता है। बस अपने इच्छित पाठ को कोटा के निशान "अपने पाठ" के साथ घेर लें
तरुण कुमार

10

अलग-अलग चौड़ाई के साथ जगह बनाना संभव है:

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

| अंतरिक्ष | पतली अंतरिक्ष | बाल अंतरिक्ष | कोई जगह नहीं |

दृश्य:

यहां छवि विवरण दर्ज करें


8

यदि आप वास्तव में इसे वैसे ही करना चाहते हैं जैसे आप कर रहे थे, तो मुझे लगता है कि आपको यह बताना होगा कि व्हाट्सएप प्रासंगिक है इससे बचकर:

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

हालाँकि, मैं इसके लिए स्ट्रिंग प्रारूपण का उपयोग करूँगा । कुछ इस प्रकार है:

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

फिर

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

1
बैकस्लैश के साथ भागने से काम नहीं चलता (मेरे लिए कम से कम)। एक प्रारूप स्ट्रिंग का उपयोग करना आम तौर पर एक महान समाधान है, लेकिन हमेशा नहीं। उदाहरण के लिए, String.formatकई स्मृति आवंटन का कारण बनता है जो एक खेल में अवांछनीय हैं।
थॉमस

रिक्त स्थान से बचने ("\" का उपयोग करके) मेरे लिए भी काम नहीं किया।
एंड्रॉयड डेवलपर

स्वरूपण केवल तभी काम करता है जब आपका पाठ सभी एक ही शैली में प्रदर्शित हो। मेरे मामले में शामिल होने वाली 2 चीजें बोल्ड बनाम सामान्य और अलग-अलग रंग हैं।

5

स्ट्रिंग संसाधन मान के साथ "" का उपयोग करें।

उदाहरण: "रिक्त स्थान के साथ मूल्य"

या

रिक्त स्थान के लिए \ u0020 कोड का उपयोग करें।


4

अच्छी तरह से काम करते हुए मैं \ u0020 का उपयोग कर रहा हूं

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

जावा फ़ाइल

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

यहाँ स्क्रीनशॉट इस कोड की कार्यप्रणाली दिखाने की छवि है


2

प्रोग्राम को अंतरिक्ष में जोड़ने के लिए एक तर्क दिया जा सकता है। चूंकि इन मामलों का उपयोग अक्सर समारोहों में किया जाएगा, इसलिए मैंने पागलपन को रोकने का फैसला किया और सिर्फ पुराने को किया + " " +। ये ज्यादातर यूरोपीय भाषाओं में समझ में आता है , मैं इकट्ठा होगा।


1

यहां सभी जवाब मेरे काम नहीं आए। इसके बजाय, XMLमैंने ऐसा किया था एक स्ट्रिंग के अंत में एक स्थान जोड़ने के लिए

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

0

मुझे विशेष रूप से एंड्रॉइड के बारे में कोई पता नहीं है, लेकिन यह सामान्य XML व्हाट्सएप हैंडलिंग जैसा दिखता है - एक तत्व के भीतर प्रमुख और अनुगामी व्हाट्सएप को आम तौर पर महत्वहीन और हटा दिया गया माना जाता है। कोशिश करें 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>

दुर्भाग्य से, xml:spaceनजरअंदाज किया जा रहा है।
थॉमस

0

यह वास्तव में सवाल का जवाब नहीं दे सकता है (एक्सएमएल में व्हाट्सएप कैसे रखा जाए) लेकिन यह अंतर्निहित समस्या को अधिक शान से हल कर सकता है।

केवल XML संसाधनों पर निर्भर होने के बजाय, प्रारूप स्ट्रिंग का उपयोग करके संक्षिप्त करें। इसलिए सबसे पहले व्हाट्सएप हटाएं

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

और फिर अपना स्ट्रिंग अलग तरीके से बनाएं:

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    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();

0

उपयोग करने का उपाय भी है CDATA। उदाहरण:

<string name="test"><![CDATA[Hello          world]]></string>

लेकिन सामान्य तौर पर मुझे लगता \u0020है कि काफी अच्छा है।


-1

यदि आपको बाद में इसे अन्य तारों के साथ जोड़ने के उद्देश्य के लिए स्थान की आवश्यकता है, तो आप अपनी स्ट्रिंग परिभाषा में तर्कों को जोड़ने के स्ट्रिंग स्वरूपण दृष्टिकोण का उपयोग कर सकते हैं:

<string name="error_">Error: %s</string>

फिर स्ट्रिंग को प्रारूपित करने के लिए (जैसे यदि आपके पास सर्वर द्वारा दी गई कोई त्रुटि है, अन्यथा उपयोग करें getString(R.string.string_resource_example)):

String message = context.getString(R.string.error_, "Server error message here")

जिसके परिणामस्वरूप:

Error: Server error message here

-6

यह xml के साथ काम नहीं करता है: अंतरिक्ष = "संरक्षित"

इसलिए मैंने इसे सबसे तेज तरीका => किया

मैंने बस एक + "" + जोड़ा जहाँ मुझे इसकी आवश्यकता थी ...

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

2
यदि आप कुछ जावा स्ट्रिंग शाब्दिक में मिश्रण करने जा रहे हैं तो संसाधनों का उपयोग करने का क्या मतलब है?
क्रिस्टोफर जॉनसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.