2013-10-30 8 views
11

मैं String कक्षा का उपयोग कुछ दिए गए डेलीमीटर के लिए किसी भी स्ट्रिंग को विभाजित करने के लिए कर रहा हूं, और यह ठीक काम करता है।स्ट्रिंगटोकनाइज़र और स्ट्रिंग.split() का उपयोग करने के बीच अंतर?

हालांकि, अब StringTokenizer के साथ एक ही तर्क को फिर से कारक करने की उम्मीद है। लेकिन दूसरे पर एक का उपयोग करने के अंतर और लाभ क्या हैं।

इसके अलावा, मुझे लगता है कि String[] एक कॉल में split() द्वारा दिया वर्ग StringTokenizer की वस्तुओं का उपयोग कर की तुलना में काफी दक्ष विकल्प है।

+2

देखें इस: http://stackoverflow.com/questions/691184/scanner-vs-stringtokenizer-vs-string-split – Jhanvi

+1

StringTokenizer शायद ही कभी इन दिनों प्रयोग किया जाता है। मैं स्कैनर पर एक नज़र रखना होगा। –

उत्तर

15

->String.split() और Pattern.split() आपको उत्तरार्द्ध करने के लिए एक आसान वाक्यविन्यास देते हैं, लेकिन यह अनिवार्य रूप से वे सब कुछ करते हैं। यदि आप परिणामस्वरूप तारों को पार्स करना चाहते हैं, या विशेष टोकन के आधार पर डेलीमीटर आधे रास्ते को बदलना चाहते हैं, तो वे आपकी सहायता नहीं करेंगे।

->StringTokenizerString.split() से भी अधिक प्रतिबंधित है, और उपयोग करने के लिए थोड़ा सा भी है। यह अनिवार्य रूप से निश्चित सबस्ट्रिंग द्वारा सीमित टोकन खींचने के लिए डिज़ाइन किया गया है। इस प्रतिबंध के कारण, यह लगभग String.split() जितना तेज़ है। (मेरा comparison of String.split() and StringTokenizer देखें।) यह नियमित अभिव्यक्ति API की भी भविष्यवाणी करता है, जिसमें से String.split() एक हिस्सा है।

आप मेरे समय से नोट करेंगे कि String.split() एक विशिष्ट मशीन पर कुछ मिलीसेकंड में हजारों तारों को टोकननाइज़ कर सकता है। इसके अलावा, इसका लाभ StringTokenizer से अधिक है कि यह आपको एक स्ट्रिंग सरणी के रूप में आउटपुट देता है, जो आमतौर पर आप चाहते हैं। Enumeration का उपयोग करके, जैसा कि StringTokenizer द्वारा प्रदान किया गया है, ज्यादातर समय "वाक्य रचनात्मक रूप से उग्र" होता है। इस बिंदु से, StringTokenizer आजकल अंतरिक्ष की बर्बादी का एक छोटा सा हिस्सा है, और आप String.split() का उपयोग भी कर सकते हैं। इस लिंक

+0

स्ट्रिंगटोकनाइज़र मेमोरी परिप्रेक्ष्य से कोई हल्का है? ऐसा लगता है कि 'विभाजन() 'लगभग 2 एक्स भारी होगा। – Larsenal

+0

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

17

एक विरासत वर्ग कि संगतता के लिए बनाए रखा है कारणों हालांकि इसके उपयोग नए कोड में हतोत्साहित किया जाता है है JavaDocs

StringTokenizer पर एक नजर डालें। यह की अनुशंसा की जाती है कि इस कार्यक्षमता की तलाश करने वाले किसी भी व्यक्ति को स्ट्रिंग या java.util.regex पैकेज की विभाजन विधि का उपयोग करें।

निम्नलिखित उदाहरण बताता है कि String.split विधि अपनी बुनियादी टोकन में एक स्ट्रिंग को तोड़ने के लिए इस्तेमाल किया जा सकता है: कि क्या StringTokenizer सिर्फ एक String जिसके द्वारा स्वीकार करता

String[] result = "this is a test".split("\\s"); 
for (int x=0; x<result.length; x++) 
    System.out.println(result[x]); 
+1

+1 विभाजन() भी क्लीनर –

1

String#split एक रेगुलर एक्सप्रेशन को स्वीकार करता है स्ट्रिंग को विभाजित करेगा। आपको हमेशा String#split पर चिपकना चाहिए, यह स्ट्रिंगटोकनाइज़र के बाद अधिक मजबूत है।

1

पढ़ें this

StringTokenizer एक विरासत वर्ग कि संगतता कारणों के लिए बनाए रखा है, हालांकि इसके उपयोग नए कोड में हतोत्साहित किया जाता है है। यह अनुशंसा की जाती है कि इस कार्यक्षमता की तलाश करने वाले किसी भी व्यक्ति को स्ट्रिंग या java.util.regex पैकेज की विभाजन विधि का उपयोग करें।

0

http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html कहते हैं:

StringTokenizer एक विरासत वर्ग कि संगतता कारणों के लिए बनाए रखा है, हालांकि इसके उपयोग नए कोड में हतोत्साहित किया जाता है है। यह अनुशंसा की जाती है कि इस कार्यक्षमता की तलाश करने वाले किसी भी व्यक्ति को स्ट्रिंग या java.util.regex पैकेज की विभाजन विधि का उपयोग करें।

तो मैं कहूंगा, इसे न बदलें और उस रेखा को उस व्यक्ति को दिखाएं जिसने इसे पुन: सक्रिय करने की सिफारिश की है। हो सकता है कि उनके पास पुरानी जानकारी या आपको बताने का एक और अच्छा कारण हो।

1

मैं निम्नलिखित कार्यक्रम,

स्ट्रिंग "x" है एक टैब है अलग 12s34;

public class Testoken { 
     public static void main(String[] args) { 
      String x = "1 2 s  3   4 "; 
      StringTokenizer st = new StringTokenizer(x,"\t"); 
      int i = 0; 
      while(st.hasMoreTokens()){ 
       System.out.println("token-->"+st.nextToken());    
       i++; 
      } 
      System.out.println("i-->"+i);//elements from tokenizer 
      String [] a = x.split("\t"); 
      System.out.println("length--->"+a.length); 
      for(int y = 0;y<a.length;y++){ 
      System.out.println("value-->"+a[y]);//elements from split 
      } 
     } 
    } 





Output: 

token-->1 
token-->2 
token-->s 
token-->3 
token-->4 
i-->5 
length--->8 
value-->1 
value-->2 
value-->s 
value--> 
value-->3 
value--> 
value--> 
value-->4 
+0

आउटपुट: टोकन -> 1 टोकन -> 2 टोकन -> रों टोकन -> 3 टोकन -> 4 मैं -> 5 लंबाई ---> 8 value- -> 1 मूल्य -> ​​2 मूल्य -> ​​रों मूल्य -> ​​ मूल्य -> ​​3 मूल्य -> ​​ मूल्य -> ​​ मूल्य -> ​​4 – user2114253

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