2010-08-12 20 views
9

निम्न कोड प्रकार के काम करता है, लेकिन स्ट्रिंग [] में तत्वों की संख्या को हल करता है। क्या स्ट्रिंग बनाने का कोई तरीका है [] गतिशील रूप से आवश्यक तत्वों की संख्या जोड़ें?स्ट्रिंगबिल्डर को स्ट्रिंग में कैसे परिवर्तित किया जा सकता है []?

private static StringBuilder names = new StringBuilder(); 
... 
public String[] getNames() { 
    int start = 0; 
    int end = 0; 
    int i = 0; 
    String[] nameArray = {"","","",""}; 

    while (-1 != end) { 
     end = names.indexOf(TAB, start);    
     nameArray[i++] = names.substring(start, end); 
     start = ++end; // The next name is after the TAB 
    } 
    return nameArray; 
} 
+0

यह वास्तव में मदद करेगा यदि आप समझाएंगे कि * कैसे * आप पाठ को तोड़ना चाहते हैं। मैंने कोड के आधार पर धारणाएं की हैं, लेकिन एक विवरण अच्छा रहा होगा। –

उत्तर

20

तो आप बस टैब पर विभाजित करने की कोशिश कर रहे हैं? कैसे के बारे में:

return names.toString().split(TAB); 

ध्यान दें कि split एक रेगुलर एक्सप्रेशन पैटर्न लेता है - तो बस डॉट्स पर विभाजित करने के लिए, उदाहरण के लिए :) split(".") की उम्मीद नहीं है

+6

मेरा जवाब बर्बाद हो गया है! ग्रेट @ जोन्स स्केट ने तीन सेकंड पहले जवाब दिया था। :-) अपनी पुस्तक जॉन पढ़ें। यह विस्मयकारी है। –

+2

बिल्कुल सही! केवल एक ही लाइन की जरूरत है। और हाँ, टैब \ t है। बहुत - बहुत धन्यवाद। – jacknad

2

आपको लगता है कि एक में करने के लिए स्ट्रिंग की विधि split उपयोग कर सकते हैं लाइन।

4

गतिशील रूप से सरणी बढ़ने के लिए, ArrayList<String> का उपयोग करें, आप परिणाम को String[] में भी परिवर्तित कर सकते हैं यदि आपके एपीआई की आवश्यकता है।

ArrayList<String> namesList = new ArrayList<String>(); 

while (-1 != end) { 
    end = names.indexOf(TAB, start);    
    namesList.add(names.substring(start, end)); 
    start = ++end; // The next name is after the TAB 
} 

return namesList.toArray(new String[ namesList.size() ]); 

जिसके अनुसार, अपने उद्देश्यों के split का उपयोग के लिए के रूप में दूसरों

+0

धन्यवाद दस लाख! बड़ी मदद – jacknad

1

आपके सामने एक अस्थायी सरणी के रूप में कार्यक्रम ढेर उपयोग करने के लिए एक पुनरावर्ती कार्यान्वयन का उपयोग कर सकते ने सुझाव दिया।

public String[] getNames() 
{ 
    return getNamesRecursively(names, 0, TAB, 0); 
} 

private static String[] getNamesRecursively(StringBuilder str, int pos, String delimiter, int cnt) 
{ 
    int end = str.indexOf(delimiter, pos); 
    String[] res; 
    if(end >= 0) 
     res = getNamesRecursively(str, end + delimiter.length(), delimiter, cnt + 1); 
    else 
    { 
     res = new String[ cnt + 1 ]; 
     end = str.length(); 
    } 
    res[ cnt ] = str.substring(pos, end); 
    return res; 
} 
+0

अव्यवहारिक। यदि इनपुट स्ट्रिंगबिल्डर पर्याप्त बड़ा है, तो आप ढेर को ओवरफ्लो कर देंगे। –

-4
StringBuilder t= new StringBuilder(); 

String s= t.toString(); 
0

स्ट्रिंग MyLocation = builder.toString();

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

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