2011-10-31 14 views
7

त्वरित उदाहरण:शुरुआत में व्हाइटस्पेस वर्णों के साथ एक स्ट्रिंग को कैसे विभाजित करें?

public class Test { 
    public static void main(String[] args) { 
     String str = " a b"; 
     String[] arr = str.split("\\s+"); 
     for (String s : arr) 
      System.out.println(s); 
    } 
} 

मैं सरणी आगमन 2 तत्व होते हैं: "एक" और "बी", लेकिन परिणाम में 3 तत्वों देखते हैं: "" (रिक्त स्ट्रिंग), "एक" और "बी"। इसे सही करने के लिए मुझे क्या करना चाहिए?

+5

['ट्रिम()'] (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#trim()) यह पहले। –

उत्तर

4

एक धोखा का प्रकार, लेकिन बदल देते हैं:

String str = " a b"; 

साथ
String str = " a b".trim(); 
+1

वैकल्पिक रूप से (धोखा नहीं): स्ट्रिंग एआर [] = str.trim()। विभाजन ("\\ s +") – Vladimir

+0

@ डेयर टार्ग, वास्तव में एक ही सटीक कोड लेता है – Joe

0

के बजाय ट्रिमिंग, तो आप सिर्फ अगर अगर एक स्ट्रिंग खाली है या नहीं यह देखने का एक जोड़ सकते हैं।

String[] arr = str.split("(?<=\\S)\\s+(?=\\S)"); 

समस्या:

+0

मुझे नहीं लगता कि आपकी प्रतिक्रिया उपयुक्त है प्रश्न... – Fred

2

अन्य तरीके से यह आगे देखने के लिए इस्तेमाल करते हैं और पीछे देखो सुनिश्चित करें कि खाली स्थान के दो गैर-सफ़ेद पात्रों के बीच sandwiched है ... की तरह कुछ होने के लिए करने के लिए है ट्रिम करने के लिए के साथ इस है कि यह प्रमुख रिक्त स्थान ट्रिम नहीं है, इस परिणाम दे रही है: यह

a 
b 

लेकिन न ही चाहिए क्योंकि String#split(...) बंटवारे के लिए है, काट-छाँट नहीं।

1

split(...) कॉल से पहले अग्रणी (और पीछे) सफेद जगह को हटाने के लिए trim() का उपयोग करना आसान समाधान है।

आप इसे split(...) के साथ नहीं कर सकते हैं। स्प्लिट रेगेक्स स्ट्रिंग विभाजक से मेल खाता है; यानी प्रत्येक मिलान किए गए विभाजक के पहले और बाद में एक सबस्ट्रिंग (संभवतः खाली) होगा।

आप उस मामले से निपट सकते हैं जहां व्हाइटस्पेस split(..., 0) का उपयोग करके अंत में है। यह किसी भी पिछली खाली तारों को त्याग देता है। हालांकि, प्रमुख रिक्त तारों को हटाने के लिए split का कोई समतुल्य रूप नहीं है।

संबंधित मुद्दे