2012-04-04 16 views
13

मैं वर्तमान में जावा सीख रहा हूं और मुझे इस समस्या का सामना करना पड़ा है जहां मैं एक ऐसी फाइल लोड करना चाहता हूं जिसमें बड़ी संख्या में रेखाएं हों (मैं लाइन द्वारा फ़ाइल लाइन पढ़ रहा हूं) और जो चीज मैं करना चाहता हूं वह कुछ पंक्तियों को छोड़ दें (छद्म -code)।जावा में टेक्स्ट फ़ाइल से कुछ पंक्ति कैसे छोड़ें?

the line thats starts with (specific word such as "ABC") 

मैं

if(line.startwith("abc")) 

उपयोग करने के लिए कोशिश की है लेकिन यह काम नहीं किया। मुझे यकीन है कि अगर मैं गलत कर रहा हूँ नहीं कर रहा हूँ यही कारण है कि मैं यहाँ एक मदद के लिए पूछ रहा हूँ है, लोड समारोह के हिस्से के नीचे,:

public String loadfile(.........){ 

//here goes the variables 

try { 

     File data= new File(dataFile); 
     if (data.exists()) { 
      br = new BufferedReader(new FileReader(dataFile)); 
      while ((thisLine = br.readLine()) != null) {       
       if (thisLine.length() > 0) { 
        tmpLine = thisLine.toString(); 
        tmpLine2 = tmpLine.split(......); 
        [...] 
+0

+1। यह सुनिश्चित नहीं है कि इसे क्यों वोट दिया गया था, लेकिन 0 – Neil

+0

-1 पर वापस डालने के लिए जावा-ईई सर्वलेट्स या जेएसपी के साथ कुछ भी नहीं करना है और पहले से हटाए गए पोस्ट की एक प्रति –

+2

+1 सुनिश्चित नहीं है कि किसने मतदान किया है। यदि गलत टैग हैं, तो बस उन्हें सही करें ... – devsnd

उत्तर

9

if (line.toUpperCase().startsWith(­"ABC")){ 
    //skip line 
} else { 
    //do something 
} 

प्रयास करें हो जाएगा ताकि सभी line धर्मान्तरित फंक्शन toUpperCase() का उपयोग कर ऊपरी अक्षरों और यह जांच करेगा कि स्ट्रिंग ABC के साथ शुरू होती है या नहीं।

और यदि यह true है तो यह कुछ भी नहीं करेगा (लाइन छोड़ें) और else भाग में जाएं।

आप startsWithIgnoreCase का भी उपयोग कर सकते हैं जो Apache Commons द्वारा प्रदान किया गया एक कार्य है। यह दो स्ट्रिंग तर्क लेता है।

public static boolean startsWithIgnoreCase(String str, 
              String prefix) 

यह फ़ंक्शन बूलियन लौटाता है। और यह जांचता है कि एक स्ट्रिंग एक निर्दिष्ट उपसर्ग के साथ शुरू होता है या नहीं।

यदि स्ट्रिंग उपसर्ग, केस असंवेदनशील के साथ शुरू होता है तो यह सच हो जाता है।

+0

यह। यकीन नहीं है कि उसने हमें त्वरित psuedocode दिया है या वास्तव में वह क्या कर रहा था, लेकिन 'startwith'' जैसा होता है 'वैसे' और 'abc'' एबीसी' – Nicholas

2

मामले महत्वपूर्ण उपयोग करने का प्रयास नहीं है, तो StringUtils.startsWithIgnoreCase(String str, String prefix) की Apache Commons

This function return boolean. 

See javadoc here

उपयोग:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){ 
    //skip line 
} else { 
    //do something 
} 
+0

जैसा नहीं है 'एक के लिए ओवरकिल जैसा लगता है -liner 'vikiii द्वारा पोस्ट किया गया। –

+1

बहुत सच है। मुझे लगता है कि यह महत्वपूर्ण है कि नौसिखिया जावा प्रोग्रामर जल्द से जल्द अपाचे कॉमन्स लाइब्रेरी सीखें, इसलिए वे सामान्य उपयोगिता को फिर से लिखते नहीं हैं। –

+0

कुछ मौकों पर ठीक से ऐसा करने के बाद, अब मैं आपका बिंदु देखता हूं। –

1

आप बड़े एक इनपुट फ़ाइल है, तो आप कोड का निर्माण करेगा एक OutOfMemoryError। टी कोड संपादित किए बिना आप इसके खिलाफ कुछ भी नहीं कर सकते हैं (अगर फ़ाइल बड़ी हो जाती है तो अधिक मेमोरी असफल हो जाएगी)।

मैं आपको चयनित लाइनों को स्मृति में संग्रहीत करता हूं। अगर फ़ाइल लेजर (2 जीबी या तो) हो जाती है तो आपके पास स्मृति में 4 जीबी होगी। (String का पुराना मूल्य और नया एक)।

आपको इसे हल करने के लिए स्ट्रीम के साथ काम करना होगा।

FileOutpuStream बनाएं, और उस स्ट्रीम में सेल्क्टेड लाइन लिखें।

आपकी विधि को बदला जाना चाहिए। एक बड़े निवेश के लिए यो एक स्ट्रिंग वापस नहीं कर सकते हैं:

public String loadfile(...){ 

आप एक Stream या एक फ़ाइल लौट सकते हैं।

public MyDeletingLineBufferedReader loadFile(...) 
0

आप का उपयोग कर सकते हैं: org.apache.commons.lang.StringUtils नीचे की तरह में

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    String lineString; 
    try{ 
    while((lineString = br.readLine()) != null) { 
     if (lineString.toUpperCase().startsWith(­"abc")){ 
      //skip 
      } else { 
      //do something 
      } 
     } 
    } 

या

static boolean startsWithIgnoreCase(String str, String prefix) विधि।

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
     String lineString; 
     try{ 
      while((lineString = br.readLine()) != null) { 
       if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){ 
       //skip 
       } else { 
       //do something 
       } 
       } 
      } 
संबंधित मुद्दे