2012-08-24 19 views
7

संभव डुप्लिकेट:
Strip Leading and Trailing Spaces From Java Stringनिकाला जा रहा है रिक्त स्थान

जब मैं एक आवेदन पत्र के अंत में रिक्त स्थान से छुटकारा पाने की जरूरत पर डेटा आयात कुछ स्ट्रिंग्स लेकिन शुरुआत में नहीं, इसलिए मैं ट्रिम() का उपयोग नहीं कर सकता ... मैंने एक विधि स्थापित की है:

public static String quitarEspaciosFinal(String cadena) { 
    String[] trozos = cadena.split(" "); 
    String ultimoTrozo = trozos[trozos.length-1]; 
    return cadena.substring(0,cadena.lastIndexOf(ultimoTrozo.charAt(ultimoTrozo.length()-1))+1); 
    } 

जहां cadena स्ट्रिंग मैं बदलने के लिए है ...

तो, अगर cadena = "1234" इस विधि वापसी होगी "1234" ...

मैं मौजूद है या एक अधिक कुशल जानना चाहते हैं

+0

स्ट्रिंग सिर्फ एक शब्द है, या यह एक वाक्य हो सकता है? – oopsi

+0

@oopsi: वास्तव में कोई फर्क नहीं पड़ता ^^ – m0skit0

उत्तर

21

आप स्ट्रिंग पर replaceAll() विधि का उपयोग कर सकते हैं, regex \s+$ के साथ ऐसा करने के लिए रास्ता ...:

return cadena.replaceAll("\\s+$", ""); 

आप केवल वास्तविक रिक्त स्थान (नहीं tabulations और न ही नई लाइनों) को निकालना चाहते हैं, तो \\s की जगह फिर से एक जगह से GEX।

+3

मैं * लेकिन + का उपयोग नहीं करता। 0 रिक्त स्थान को प्रतिस्थापित करने के लिए बेकार;) – m0skit0

+0

'प्रतिस्थापन' यहां भी उद्देश्य प्रदान करेगा। –

+0

आपका स्वागत है! – kgautron

6
public static String replaceAtTheEnd(String input){ 
    input = input.replaceAll("\\s+$", ""); 
    return input; 
} 
+2

मैं * लेकिन + का उपयोग नहीं करता। 0 रिक्त स्थान को प्रतिस्थापित करने के लिए बेकार;) – m0skit0

+1

@ m0skit0 :) यह पहला था +, फिर मैं संपादित करता हूं *, कोई विचार नहीं है :)। thx हालांकि – Eugene

8
String s = " this has spaces at the beginning and at the end  "; 
    String result = s.replaceAll("\\s+$", ""); 
4

मैं इस तरह यह करना चाहते हैं:

public static String trimEnd(String s) 
{ 
    if (s == null || s.length() == 0) 
     return s; 
    int i = s.length(); 
    while (i > 0 && Character.isWhitespace(s.charAt(i - 1))) 
     i--; 
    if (i == s.length()) 
     return s; 
    else 
     return s.substring(0, i); 
} 

यह रास्ता रेगुलर एक्सप्रेशन के उपयोग की तुलना में अधिक वर्बोज़ है, लेकिन यह अधिक कुशल होने की संभावना है।

+0

क्या मुझे डाउनवोट का कारण पता हो सकता है? –

+0

मैं दक्षता की बात के बारे में इतना निश्चित नहीं होगा (रेगेक्स को देशी कोड में कोड किया जा सकता है)। और वास्तव में पहिया को फिर से शुरू करना बेकार है। क्यों कुछ मैन्युअल रूप से कोड करें कि आप पुस्तकालयों द्वारा पहले से ही कर सकते हैं? यदि आप उपलब्ध हैं तो आप केवल पहिया को फिर से शुरू कर सकते हैं (या बहुत धीमा है)। बाद में अनुकूलित करें;) और मैंने वास्तव में डाउनवोट हटा दिया: पी – m0skit0

+0

स्पष्ट रूप से दक्षता के बारे में सुनिश्चित करने का एकमात्र तरीका एक सार्थक डेटा सेट के खिलाफ परीक्षण करना है। उस ने कहा कि एक regexp इसकी सामान्यता के लिए भुगतान करने की संभावना है: उदाहरण के लिए regexp इंजन आमतौर पर दक्षता के लिए इनपुट अभिव्यक्ति का अनुवाद करते हैं, जो एक चरण है जो मेरे संस्करण को करने की ज़रूरत नहीं है। बाहरी पुस्तकालयों के लिए मैं आपके साथ सहमत हूं, लेकिन यह अभी भी एक छोटे से टुकड़े को बनाए रखने के बीच एक व्यापार बंद है और अभी तक एक और निर्भरता का ट्रैक रखता है। क्यों, कभी-कभी यह तैयार किए गए समाधान की तलाश करने के लिए कोड को कम करता है और कुछ खुद को डीबग करता है! –