2012-10-31 27 views
6

में एक चार सरणी में पाठ फ़ाइल पढ़ना मैं एक टेक्स्ट फ़ाइल पढ़ रहा हूं और इसे चारों ओर एक सरणी चार में संग्रहीत करने की कोशिश कर रहा हूं। मेरा दृष्टिकोण (नीचे) 10012 की प्रारंभिक लंबाई (यहां मेरा मुख्य मुद्दा) के साथ char सरणी पूर्व-परिभाषित करता है। इसलिए, यदि फ़ाइल में उस राशि से कम वर्ण हैं (समस्या उससे भी अधिक वर्ण हैं), तो मेरे सरणी में नल हैं। मैं इससे बचना चाहता हूं। क्या टेक्स्ट फ़ाइल में मौजूद वर्णों की संख्या को पूर्व निर्धारित करने का कोई तरीका है? या फ़ाइल चार को char द्वारा स्टोर करने के लिए पूरी तरह से एक बेहतर दृष्टिकोण है?जावा

char buf[] = new char[100000]; 
FileReader fr = new FileReader(filename); 
BufferedReader br = new BufferedReader(fr); 
br.read(buf); 
for(int i = 0; i < buf.length; i++) 
{ 
    //Do stuff here 
} 

उत्तर

5

मूल्यों को स्वीकार करने के लिए अक्षरों की एक ArrayList का उपयोग करें।

char[] resultArray = list.toArray(new char[list.size()]); 

के रूप में एक सरणी है कि परिवर्तित ArrayList के बाद इस प्रकार आप br.read के बजाय br.readLine()() का उपयोग करना चाहिए: एक स्कैनर

String str; 
while((str = br.readLine())!=null){ 
     str.tocharArray(); 
} 
+0

मैंने कोशिश की लेकिन ब्र्रेड() विधि केवल एक चार सरणी स्वीकार करती है। –

+1

तो br.read() का उपयोग न करें, br.readLine का उपयोग करें और स्ट्रिंग प्राप्त करें और फिर string.toCharArray() – Arham

2

उपयोग के बजाय!

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

यह कार्यात्मक एक ही बात करता है:

String theString = ""; 

File file = new File("data.txt"); 
Scanner scanner = new Scanner(file); 

theString = scanner.nextLine(); 
while (scanner.hasNextLine()) { 
     theString = theString + "\n" + scanner.nextLine(); 
} 

char[] charArray = theString.toCharArray(); 

यह करने के लिए ऊपर है कि आप जावा के स्ट्रिंग प्रकार है जो आप के लिए बुरा लंबाई और संयोजन व्यापार के सभी संभालती है का लाभ लेने के लिए मिलता है। और String.toCharArray() विधि पहले से ही एक सरणी को वापस करने के लिए बनाई गई है जिसे स्वचालित रूप से जिस तरीके से आप चाहते हैं उसका आकार बदलता है।

+0

द्वारा वर्ण निकालें, आप एक अतिरिक्त चार "\ n" जोड़ रहे हैं। शायद आपको इसे हटा देना चाहिए। – Arham

+0

चार द्वारा चार में पढ़ना प्रत्येक नई लाइन के लिए एक न्यूलाइन चरित्र लौटाएगा। स्कैनर मानता है कि आप बस लाइन की सामग्री चाहते हैं और बदले में एक नल-टर्मिनेटेड स्ट्रिंग लौटाते हैं। नतीजा यह है कि यदि आप एक विशाल स्ट्रिंग चाहते हैं (जैसा कि 100000 की शुरुआती लंबाई के अनुसार बताया गया है) तो आपको प्रत्येक पंक्ति के चरित्र डेटा के बीच उनको दोबारा जोड़ना होगा। (जावा स्ट्रिंग कॉन्सटेनेशन एपेंडेड स्ट्रिंग्स के बीच शून्य-समाप्ति से छुटकारा पाता है) संक्षेप में, आपको समान परिणाम प्राप्त करने के लिए इसे करने की आवश्यकता है – darkpbj

+0

मुझे अभी भी नहीं दिखाई देता है कि आप स्पष्ट रूप से "\ n" क्यों संभालते हैं आप नहीं जानते कि फ़ाइल में क्या है। आप सरणी में noOfLines * new_line_chars जोड़ रहे हैं, जबकि कोई फ़ाइल में केवल वर्णों की संख्या चाहता है। अपने कार्यक्रम को केवल एक पंक्ति के साथ आज़माएं और आप समझेंगे। – Arham