2013-02-14 15 views
6

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

सहेजने वाला प्रारूप स्वयं एक संकुचित ब्लॉक में होना चाहता है - एक या दो अल्फान्यूमेरिक वर्ण एकल "टाइल" की सामग्री को दर्शाते हैं। मैं बस क्षेत्र की हर स्क्रीन के लिए 16 9 लाइनों नहीं चाहता हूं, मैं उन्हें 13 * 13 (फिर से, उपयोगकर्ता के अनुकूल होने के लिए) के संकुचित ब्लॉक में रखना चाहूंगा।

अनिवार्य रूप से, मैं दोनों कैसे हो सकता हूं क) का पता लगाने अगर एक लाइन के साथ% ख शुरू होता है) यदि हां, तो अगली पंक्ति ग पर चले जाएँ) यदि नहीं, तो स्ट्रिंग सरणी के लिए एक समय नकल घ) स्किप में दो वर्णों को पढ़ने रिक्त लाइनों

मैं समझता हूँ कि बुनियादी आईओ , लेकिन मैं चरित्र और रेखा से दोनों को पढ़ने का कोई तरीका नहीं ढूंढ पाया।

उत्तर

3

व्यक्तिगत रूप से, मैं एक BufferedReader का उपयोग अलग-अलग String वस्तुओं में लाइन द्वारा फ़ाइल लाइन को पढ़ने के लिए, और सामग्री का निरीक्षण किया जाएगा। आप जांच सकते हैं कि चालाकी से नामित String.startsWith("%") विधि का उपयोग करके एक टिप्पणी चरित्र के साथ एक लाइन शुरू होती है, और String.charAt(index) का उपयोग करके लाइन में अलग-अलग वर्णों को प्राप्त करें, या String.substring(start, start+2) का उपयोग करके डबल वर्ण प्राप्त करें।

+0

क्षमा करें, एक और त्वरित प्रश्न जो इसे अपने विषय की गारंटी नहीं देता है: क्या ऐसा करने का कोई तरीका है (एक उचित तरीके से) जिसमें उस डेटा के साथ बातचीत करने वाली प्रत्येक विधि की आवश्यकता नहीं होती है (यानी प्रत्येक विधि) IOException खंड फेंकता है? – JTTCOTE

+0

'IOException' फेंकने की संभावना को हटाने का कोई तरीका नहीं है। आपको यह तय करने की ज़रूरत है कि आप इसे कैसे और कहाँ संभालना चाहते हैं। * एक * संभव तरीका अपवाद को पकड़ने के लिए एक अनचेक 'रनटाइम अपवाद' फेंक सकता है। – SimonC

0

मैं स्कैनर के साथ लाइन-दर-रेखा पढ़ता हूं, पहले जोड़े के पात्रों को पार्स करता हूं, और यदि आपको आवश्यकता हो तो आगे बढ़ें। उदाहरण:

Scanner lineReader = new Scanner(new FileReader(filename)); 
Scanner parser; 
while (scanner.hasNextLine()){ 
    parser = new Scanner(scanner.nextLine()); 
    if(parser.hasNext())){ //checks for blank line 
    String firstWord = parser.next(); 
    if(/*Check for %*/) 
     continue; 
    else 
     //parse as you will 
    } 
} 
+0

हालांकि, यदि आपके चरित्र जोड़े को सीमित नहीं किया गया है, तो हो सकता है कि आप प्रत्येक पंक्ति को पार्स करने के लिए दूसरे स्कैनर का उपयोग नहीं करना चाहें। –

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