2015-05-28 10 views
6

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

[data]<US>[data]<US> 

जहां <US> ASCII इकाई विभाजक (कोड 0x1F) है: स्ट्रिंग मैं प्राप्त इस संरचना है। विभाजन के लिए कोड,

String[] fields = someString.split(String.valueOf(0x1f)); 

यह ठीक काम करता है जब तक [DATA] कोई रिक्त स्ट्रिंग है। उस स्थिति में, डेटा बस छोड़ दिया जाता है। [DATA], null और [DATA]:

मैं [DATA]<US><US>[DATA]<US> इस तरह की स्ट्रिंग तीन तत्वों के साथ एक सरणी वापस जाने के लिए चाहते हैं।

मैं यह कैसे कर सकता हूं?

उत्तर

8

आप एक दूसरा तर्क के रूप में -1 के साथ अपने split parametrize हैं, तो आप एक खाली String जहां [data] याद आ रही है (लेकिन null) प्राप्त होंगे। से docs

तो n गैर सकारात्मक है

someString.split(String.valueOf(0x1f), -1); 

स्पष्टीकरण तो पैटर्न संभव के रूप में कई बार के रूप में लागू किया जाएगा और सरणी किसी भी लम्बाई हो सकता है।

.. जहां n सीमा, यानी दूसरा तर्क है।

0

यह एक काम कोड है

String s="[DATA]<US><US>[DATA]<US>"; 
String arr []= s.split("<US>"); 
for(String str :arr) { 
    if(str.equals("")) { 
     System.out.println("null"); 
    } else { 
     System.out.println(str); 
    }  
} 

आउटपुट ::

[DATA] 
null 
[DATA] 

अपने आवश्यकता के अनुसार अधिक विशिष्ट होना करने के लिए:

public String [] format(String s) {  
     String arr []= s.split("<US>");  
     for(int i=0;i<arr.length;i++) 
     { 
      if(arr[i].equals("")) 
      { 
       arr[i]=null; 
      }   
     } 
     return arr; 
    } 
+0

मेरा मुद्दा यह था कि यह वास्तव में काम नहीं करता है। जब कोई सीमा प्रदान नहीं की जाती है तो कोई खाली तार नहीं होते हैं। –

+0

@ BartFriederichs कृपया elborate। कोई सीमा से आपका क्या मतलब है? – Oliver

+0

स्वीकृत उत्तर देखें। –

0

आप कर सकते थे बस पाश के माध्यम से बाद में सरणी और रिक्त तारों को शून्य के रूप में असाइन करें:

public class StringSplitting { 

    public static void main(String[] args){ 

     String inputs = "[data]<US><US>[data]<US>"; 

     String[] fields = inputs.split("<US>"); 


     //set empty values to null 
     for(int i = 0; i < fields.length; i++){ 
      if(fields[i].length() == 0){ 
       fields[i] = null; 
      } 
     } 

     //print output 
     for(String e: fields){ 
      if(e == null){ 
       System.out.println("null"); 
      }else{ 
       System.out.println(e); 
      } 
     } 
    } 
} 
संबंधित मुद्दे