2012-04-08 17 views
6

पर स्ट्रिंग्स में टेक्स्ट फ़ाइल को विभाजित करें मैं स्थानीय txt फ़ाइल को पढ़ना चाहता हूं और इस फ़ाइल में टेक्स्ट पढ़ना चाहता हूं। इसके बाद मैं नीचे दिए गए उदाहरण में स्ट्रिंग्स में इस पूरे पाठ को विभाजित करना चाहता हूं।खाली लाइन

उदाहरण: कहना फ़ाइल स्ट्रिंग्स

s1 = abcdef+"\n"+ghijkl; 

s2 = aededd+"\n"+ededed; 

s3 = ededfe+"\n"+efefeef+"\n"+efefeff; 

........................ 

मेरा मतलब है मैं खाली पंक्ति पर पाठ विभाजित करना चाहते करने के लिए

abcdef         
ghijkl 

aededd    
ededed 

ededfe 
efefeef 
efefeff 

...... 
...... 

मैं इस पाठ विभाजित करना चाहते हैं contains- देता है।

मुझे पता है कि फ़ाइल को कैसे पढ़ा जाए। मैं तार

+0

क्या आप सुनिश्चित हैं कि पूरी फ़ाइल को पढ़ने के बाद इस तरह की लंबी स्ट्रिंग को विभाजित करना एक अच्छा विचार है? मैं आपको लाइनों के बजाय पढ़ने के बजाय सुझाव देता हूं, उन्हें '' \ n'' के माध्यम से 'स्ट्रिंगबिल्डर'' में रिक्त रेखा पढ़ने तक जोड़ दें। –

+0

'string.split (" \ n \ r ")' यह उत्तर ढूंढें [यहां] (http://stackoverflow.com/questions/11717667/how-to-split-string-with-empty- new-line) – Shushan

उत्तर

6

आप नई पंक्तियों द्वारा द्वारा

String.split(); 

एक सरणी के लिए एक स्ट्रिंग विभाजित कर सकते हैं अगर आप यह चाहते करने के लिए पाठ बंटवारे में मदद यह हो जाएगा

String.split("\\n\\n"); 

अद्यतन चाहते हैं *

यदि मैं समझता हूं कि आप क्या कह रहे हैं तो जॉन।

फिर अपना कोड अनिवार्य रूप से किया जाएगा

BufferedReader in 
    = new BufferedReader(new FileReader("foo.txt")); 

List<String> allStrings = new ArrayList<String>(); 
String str =""; 
while(true) 
{ 
    String tmp = in.readLine(); 
    if(tmp.isEmpty()) 
    { 
     if(!str.isEmpty()) 
     { 
      allStrings.add(str); 
     } 
     str= ""; 
    } 
    else if(tmp==null) 
    { 
     break; 
    } 
    else 
    { 
     if(str.isEmpty()) 
     { 
      str = tmp; 
     } 
     else 
     { 
      str += "\\n" + tmp; 
     } 
    } 
} 

हो सकता है कि तुम क्या पार्स करने के लिए कोशिश कर रहे हैं।

जहां सभी स्ट्रिंग्स आपके सभी तारों की एक सूची है।

+0

मुझे लगता है कि पैटर्न डबल लाइनों के लिए \\ n \\ n होना चाहिए। – GavinCattell

+0

@GavinCattell धन्यवाद, – Kevin

+0

अपडेट किया गया नई लाइन पर नहीं, मैं खाली रेखा पर तारों को विभाजित करना चाहता हूं क्योंकि स्ट्रिंग लाइनों की संख्या हो सकती है। –

4

यह कैसे फ़ाइल इनकोडिंग पर निर्भर हो सकता है, इसलिए मैं संभावना निम्नलिखित करना होगा:

String.split("(\\n\\r|\\n|\\r){2}"); 

कुछ पाठ फ़ाइलों सांकेतिक शब्दों में बदलना के रूप में "\ n \ r" नई-पंक्तियों जबकि दूसरों को बस "\ n" हो सकता है । एक पंक्ति में दो नई लाइनों का मतलब है कि आपके पास खाली रेखा है।

4

उपयोगी डेटा के बीच 2 से अधिक खाली रेखाएं होने पर भी नीचे कोड काम करेगा।

import java.util.regex.*; 

// read your file and store it in a string named str_file_data 

Pattern p = Pattern.compile("\\n[\\n]+");  /*if your text file has \r\n as the newline character then use Pattern p = Pattern.compile("\\r\\n[\\r\\n]+");*/ 
String[] result = p.split(str_file_data); 

(तो वहाँ लेखन त्रुटि हो सकता है मैं कोड का परीक्षण नहीं किया।)

3

मैं और अधिक सामान्य regexp सुझाव है:

text.split("(?m)^\\s*$"); 

इस मामले में यह सही ढंग से किसी भी अंत पर काम करेगा ऑनलाइन सम्मेलन, और एक ही खाली और खाली-स्थान-केवल लाइनों का इलाज करेगा।

2

गॉडविन सही रास्ते पर थे, लेकिन मुझे लगता है कि हम इस काम को थोड़ा बेहतर बना सकते हैं। Regx में '[]' का उपयोग करना एक है या, इसलिए उसके उदाहरण में यदि आपके पास \ r \ n था जो कि एक नई रेखा होगी, तो खाली रेखा नहीं होगी। नियमित अभिव्यक्ति इसे \ r और \ n दोनों पर विभाजित करेगी, और मुझे लगता है कि हम एक खाली रेखा की तलाश में थे, जिसके लिए एक \ n \ r \ n \ r, \ r \ n \ आर \ n, एक \ n \ r \ r \ n, एक \ r \ n \ n \ r, या \ n \ n या \ r \ r

तो पहले हम या तो \ n देखना चाहते हैं \ r या \ r \ n दो बार, दोनों के किसी भी संयोजन के साथ संभव है।

String.split(((\\n\\r)|(\\r\\n)){2})); 

अगले हम एक \ बिना n यह

String.split(\\r{2}); 

अंत के बाद \ r के लिए देखने की जरूरत है, की सुविधा देता है \ N

String.split(\\n{2}); 

और यह सब एक साथ के लिए भी ऐसा ही होना चाहिए कि

String.split("((\\n\\r)|(\\r\\n)){2}|(\\r){2}|(\\n){2}");

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

.match($^$) 
संबंधित मुद्दे