दिलचस्प पोस्ट
MVVM: ट्यूटोरियल शुरू से खत्म करने के लिए? jquery नए तत्व नहीं देखता है अनक्यूट टाइप एरर: ऑब्जेक्ट में कोई तरीका नहीं है 'डायलॉग' ओपनग्लैंड में विजुअल सी ++ का उपयोग करके एक 3D क्षेत्र बनाना मैं वेबस्टॉर्म के भीतर से नोडोमोन कैसे चला सकता हूं? स्काला – एक्सएमएल में नेस्टेड तत्वों को संशोधित करना ग्रहण / जावा कोड पूरा नहीं हो रहा है क्या एचटीएमएल में छुपा इनपुट की लंबाई का अधिकतम आकार है? एएसपी.एन.टी. एमवीसी: ईएफ एंटिटीज का उपयोग व्यू मॉडेल्स के रूप में? जावा JSON धारावाहिककरण – सर्वोत्तम अभ्यास क्यों dict.get (कुंजी) बजाय dict के? RTSP यूट्यूब लिंक सी # इंटरफ़ेस विधियों को सार या आभासी क्यों घोषित नहीं किया गया है? यह कैसे पता चलेगा कि सीएसवी फ़ाइल फ़ील्ड टैब सीमांकित हैं या अल्पविराम से सीमांकित हैं I कोणीय 2/4 IE11 में काम नहीं कर रहा है

मैं जावा में इनपुट वर्ण-दर-वर्ण कैसे पढ़ूं?

मैं c-style getchar() लिए उपयोग किया जाता हूं, लेकिन ऐसा लगता है कि जावा के लिए तुलनीय कुछ नहीं है मैं एक लेक्सिकल विश्लेषक का निर्माण कर रहा हूं, और मुझे वर्ण द्वारा इनपुट चरित्र में पढ़ने की आवश्यकता है।

मुझे पता है कि मैं टोकन या रेखा में स्कैन करने के लिए स्कैनर का प्रयोग कर सकता हूं और टोकन के द्वारा चार-चार वर्णों को पार्स कर सकता हूं, लेकिन यह कई पंक्तियों के फैले तारों के लिए बोझल लगता है क्या जावा में इनपुट बफ़र से अगले अक्षर प्राप्त करने का कोई तरीका है, या मैं स्कैनर वर्ग के साथ बस प्लग करना चाहिए?

इनपुट एक फाइल है, कुंजीपटल नहीं है

Solutions Collecting From Web of "मैं जावा में इनपुट वर्ण-दर-वर्ण कैसे पढ़ूं?"

रीडर का प्रयोग करें। रीड () 1 का रिटर्न वैल्यू स्ट्रीम के अंत का मतलब है; अन्यथा, चार को डालें

यह कोड फ़ाइल तर्कों की सूची से चरित्र डेटा पढ़ता है:

 public class CharacterHandler { //Java 7 source level public static void main(String[] args) throws IOException { // replace this with a known encoding if possible Charset encoding = Charset.defaultCharset(); for (String filename : args) { File file = new File(filename); handleFile(file, encoding); } } private static void handleFile(File file, Charset encoding) throws IOException { try (InputStream in = new FileInputStream(file); Reader reader = new InputStreamReader(in, encoding); // buffer for efficiency Reader buffer = new BufferedReader(reader)) { handleCharacters(buffer); } } private static void handleCharacters(Reader reader) throws IOException { int r; while ((r = reader.read()) != -1) { char ch = (char) r; System.out.println("Do something with " + ch); } } } 

उपरोक्त कोड के बारे में बुरी चीज यह है कि वह सिस्टम की डिफ़ॉल्ट वर्ण सेट का उपयोग करती है। जहां कहीं भी संभव हो, ज्ञात एन्कोडिंग पसंद करते हैं (आदर्श रूप में, यदि आपके पास कोई विकल्प है तो यूनिकोड एन्कोडिंग) और अधिक के लिए वर्णसेट वर्ग देखें। (यदि आप संदिग्ध महसूस करते हैं, तो आप इस मार्गदर्शिका को वर्ण एन्कोडिंग में पढ़ सकते हैं।)

(एक बात जो आप के लिए तलाश कर सकते हैं, पूरक यूनिकोड वर्ण हैं – जिनके लिए स्टोर करने के दो चर मूल्यों की आवश्यकता होती है। अधिक विवरण के लिए कैरेक्टर वर्ग देखें, यह बढ़त का मामला है जो कदाचित होमवर्क पर लागू नहीं होगा।)

एक एन्कोडिंग निर्दिष्ट करने और इनपुट बफ़र करने के लिए अन्य लोगों की सिफारिशों का मेल करना, मुझे लगता है कि यह एक बहुत ही पूर्ण उत्तर है

यह मानते हुए कि आपके पास File प्रतिनिधित्व करने वाला File ऑब्जेक्ट है जिसे आप पढ़ना चाहते हैं:

 BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream(file), Charset.forName("UTF-8"))); int c; while((c = reader.read()) != -1) { char character = (char) c; // Do something with your character } 

एक और विकल्प चरित्र में वर्णों में चीजों को नहीं पढ़ना है – पूरी फाइल मेमोरी में पढ़ें यह उपयोगी है अगर आपको एक से अधिक बार वर्णों को देखने की जरूरत है ऐसा करने का एक तुच्छ तरीका है:

  /** Read the contents of a file into a string buffer */ public static void readFile(File file, StringBuffer buf) throws IOException { FileReader fr = null; try { fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); char[] cbuf = new char[(int) file.length()]; br.read(cbuf); buf.append(cbuf); br.close(); } finally { if (fr != null) { fr.close(); } } } 

एक बफर रीडर में अपना इनपुट स्ट्रीम लपेटें, फिर स्ट्रीम के अंत तक एक समय में एक बाइट पढ़ने के लिए पढ़ने के तरीके का उपयोग करें।

 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Reader { public static void main(String[] args) throws IOException { BufferedReader buffer = new BufferedReader( new InputStreamReader(System.in)); int c = 0; while((c = buffer.read()) != -1) { char character = (char) c; System.out.println(character); } } } 

अगर मैं आप थे तो मैं सिर्फ एक स्कैनर का उपयोग कर रहा हूं और ".nextbyte ()" का उपयोग कर रहा हूं। आप इसे चारों ओर डाल सकते हैं और आप अच्छे हैं।

आपके पास कई विकल्प हैं यदि आप BufferedReader उपयोग करते हैं। यह बफर रीडर रीडर की तुलना में तेज़ है, ताकि आप उसे लपेटें।

 BufferedReader reader = new BufferedReader(new FileReader(path)); reader.read(char[] buffer); 

यह चार सरणी में पंक्ति पढ़ता है आपके पास समान विकल्प हैं दस्तावेज़ीकरण देखें

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

आम तौर पर बोलते हुए, आप बफररड रीडर या बफरेड इनटस्टस्ट्रीम का उपयोग करना चाहते हैं, जो आप वास्तव में उपयोग किए जा रहे बफ़र के ऊपर जो भी वे बफर बनाए रखते हैं, वे बहुत से पढ़ने के लिए बहुत तेज़ होंगे

जावा 5 की नई फीचर में स्कैनर विधि है जो जावा में चरित्र के इनपुट वर्ण को पढ़ने का मौका देता है।

उदाहरण के लिए; उपयोग के लिए स्कैनर विधि आयात java.util.Scanner; मुख्य विधि के बाद: परिभाषित करें

स्कैनर myScanner = नया स्कैनर (System.in); // पढ़ें चरित्र के लिए

चार कुछ = myScanner.findInLine ("।")। charAt (0);

आप कुछ भी अकेले चरित्र की दुकान करते हैं, यदि आप चाहते हैं कि और अधिक पढ़ा जाए तो कुछ और वस्तु की तरह अधिक ऑब्जेक्ट घोषित करें, कुछ भी 2 … अपने जवाब के लिए और अधिक उदाहरण कृपया अपने हाथ में जांच करें (प्रतिलिपि / पेस्ट)

  import java.util.Scanner; class ReverseWord { public static void main(String args[]){ Scanner myScanner=new Scanner(System.in); char c1,c2,c3,c4; c1 = myScanner.findInLine(".").charAt(0); c2 = myScanner.findInLine(".").charAt(0); c3 = myScanner.findInLine(".").charAt(0); c4 = myScanner.findInLine(".").charAt(0); System.out.print(c4); System.out.print(c3); System.out.print(c2); System.out.print(c1); System.out.println(); } }