2012-09-12 23 views
5

मैं एक अल्पविराम बंटवारे का एक उचित रूप में सरल समस्या टोकन, जिससे उत्पादन मामलों में खाली टोकन शामिल होना चाहिए में String अलग है युक्त Tokenising जहां:एक स्ट्रिंग खाली टोकन

  • String में पहले वर्ण एक अल्पविराम है ।
  • String में अंतिम वर्ण एक अल्पविराम है।
  • दो लगातार कॉमा होते हैं।
उदाहरण के लिए

, String के लिए: {"", "abd", "def", "", "ghi", ""}: ",abd,def,,ghi," उत्पादन उपज चाहिए।

मैंने String.split, Scanner और StringTokenizer का उपयोग करने की कोशिश की है, लेकिन प्रत्येक एक अलग अवांछित आउटपुट (नीचे उदाहरण) देता है। क्या कोई इस बारे में सुरुचिपूर्ण समाधान सुझा सकता है, अधिमानतः जेडीके कक्षाओं का उपयोग कर सकता है? जाहिर है, मैं कुछ खुद को कोड कर सकता हूं लेकिन मुझे लगता है कि मुझे तीन दृष्टिकोणों में से एक पर कुछ याद आ रहा है। ध्यान दें कि डिलीमीटर एक निश्चित String है हालांकि आवश्यक रूप से एक अल्पविराम, न ही एक वर्ण है।

उदाहरण कोड

import java.util.*; 

public class Main12 { 
    public static void main(String[] args) { 
    String s = ",abd,def,,ghi,"; 
    String[] tokens = s.split(","); 

    System.err.println("--- String.split Output ---"); 
    System.err.println(String.format("%s -> %s", s, Arrays.asList(tokens))); 

    for (int i=0; i<tokens.length; ++i) { 
     System.err.println(String.format("tokens[%d] = %s", i, tokens[i])); 
    } 

    System.err.println("--- Scanner Output ---"); 

    Scanner sc = new Scanner(s); 
    sc.useDelimiter(","); 
    while (sc.hasNext()) { 
     System.err.println(sc.next()); 
    } 

    System.err.println("--- StringTokenizer Output ---"); 

    StringTokenizer tok = new StringTokenizer(s, ","); 
    while (tok.hasMoreTokens()) { 
     System.err.println(tok.nextToken()); 
    } 
    } 
} 

आउटपुट

$ java Main12 
--- String.split Output --- 
,abd,def,,ghi, -> [, abd, def, , ghi] 
tokens[0] = 
tokens[1] = abd 
tokens[2] = def 
tokens[3] = 
tokens[4] = ghi 
--- Scanner Output --- 
abd 
def 

ghi 
--- StringTokenizer Output --- 
abd 
def 
ghi 

उत्तर

12

limit तर्क के रूप में एक -1split को दर्रा:

String s = ",abd,def,,ghi,"; 
String[] tokens = s.split(",", -1); 

फिर आपके परिणाम सरणी में किसी भी पिछली खाली तार शामिल होगी।

javadocs से:

हैं [सीमा] गैर सकारात्मक है तो पैटर्न संभव के रूप में कई बार के रूप में लागू किया जाएगा और सरणी किसी भी लम्बाई हो सकता है। यदि [सीमा] शून्य है तो पैटर्न जितनी बार संभव हो उतनी बार लागू किया जाएगा, सरणी में कोई लंबाई हो सकती है, और पिछली तारों को पीछे छोड़ दिया जाएगा।

अगर limit तर्क 0 है के रूप में कार्य करता है split(regex) कॉलिंग, तो रिक्त स्ट्रिंग अनुगामी छोड़ दिए जाते हैं।

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