इसका उत्तर शायद और कहाँ पर दिया गया है, लेकिन आपको एक इंट वैल्यू का चरित्र मूल्य कैसे मिलता है?
विशेष रूप से मैं एक tcp स्ट्रीम और रीडर्स से पढ़ रहा हूँ। () विधि एक int देता है।
मुझे इस से चार कैसे मिलेगा?
इसका उत्तर शायद और कहाँ पर दिया गया है, लेकिन आपको एक इंट वैल्यू का चरित्र मूल्य कैसे मिलता है?
विशेष रूप से मैं एक tcp स्ट्रीम और रीडर्स से पढ़ रहा हूँ। () विधि एक int देता है।
मुझे इस से चार कैसे मिलेगा?
जवाबों:
यदि आप किसी स्ट्रीम को टेक्स्ट में बदलने की कोशिश कर रहे हैं, तो आपको इस बात की जानकारी होनी चाहिए कि आप किस एन्कोडिंग का उपयोग करना चाहते हैं। फिर आप Stringकंस्ट्रक्टर में बाइट्स की एक सरणी पास कर सकते हैं और इसके बजाय उपयुक्त के साथ ए Charset, या उपयोग कर सकते हैं ।InputStreamReaderCharset
सीधे शब्दों में से कास्टिंग intके लिए char, केवल काम करता है अगर आप चाहते हैं ISO-8859-1 अगर आपका पढ़ने सीधे एक धारा से बाइट्स।
संपादित करें: यदि आप कर रहे हैं पहले से ही एक का उपयोग कर Reader, फिर से वापसी मान कास्टिंग read()के लिए char(जाँच है कि क्या यह है -1 या नहीं करने के बाद) जाने के लिए सही रास्ता है ... लेकिन यह सामान्य रूप से अधिक कुशल और सुविधाजनक है कॉल करने के लिए read(char[], int, int)की एक पूरी ब्लॉक पढ़ने के लिए एक समय में पाठ। हालांकि, यह देखने के लिए कि कितने वर्ण पढ़े गए हैं, वापसी मूल्य की जांच करना न भूलें।
InputStreamReaderएक में BufferedReader, के रूप में जावाडोक में उल्लेख किया docs.oracle.com/javase/8/docs/api/java/io/...
शायद आप के लिए पूछ रहे हैं:
Character.toChars(65) // returns ['A']
और जानकारी: Character.toChars(int codePoint)
निर्दिष्ट चरित्र (यूनिकोड कोड पॉइंट) को एक चार्ट में संग्रहीत UTF-16 प्रतिनिधित्व में परिवर्तित करता है। यदि निर्दिष्ट कोड बिंदु एक BMP (बेसिक मल्टीलिंगुअल प्लेन या प्लेन 0) मान है, तो परिणामी चार सरणी का कोडपॉइंट के समान मूल्य है। यदि निर्दिष्ट कोड बिंदु एक पूरक कोड बिंदु है, तो परिणामी वर्ण सरणी में संबंधित सरोगेट जोड़ी है।
toCharsकरना आमतौर पर अनुचित है। यदि वह एक पाठक से पढ़ रहा है, तो यह ठीक है।
यह इस बात पर निर्भर करता है कि आप "एक इंट को चेर में बदलें" से क्या मतलब है।
यदि आप केवल इंट में वैल्यू डालना चाहते हैं, तो आप इसे जावा के टाइपकास्ट नोटेशन का उपयोग करके डाल सकते हैं:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
यदि आप पूर्णांक 1 को वर्ण '1' में बदलते हैं, तो आप इसे इस तरह कर सकते हैं:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
यदि आप इंट 5 को केवल '5' में बदलना चाहते हैं: (केवल पूर्णांक 0 - 9 के लिए)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
सरल कास्टिंग:
int a = 99;
char c = (char) a;
क्या कोई कारण है कि यह आपके लिए काम नहीं कर रहा है?
यहां अधिकांश उत्तर शॉर्टकट का प्रस्ताव करते हैं, जो आपको बड़ी समस्याओं में ला सकते हैं यदि आपको पता नहीं है कि आप क्या कर रहे हैं। यदि आप शॉर्टकट लेना चाहते हैं, तो आपको यह जानना होगा कि आपका डेटा किस एन्कोडिंग में है।
जब भी जावा अपने प्रलेखन में पात्रों के बारे में बात करता है, तो वह 16-बिट पात्रों के बारे में बात करता है।
आप एक का उपयोग कर सकते हैं DataInputStream, जिसमें सुविधाजनक तरीके हैं। दक्षता के लिए, इसे एक में लपेटें BufferedReader।
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
बात यह है कि प्रत्येक readChar()वास्तव में 2 प्रदर्शन करेगाread का और उन्हें एक 16-बिट चरित्र में संयोजित करेगा।
US-ASCII 1 वर्ण को एनकोड करने के लिए 8 बिट्स रखता है। ASCII तालिका केवल 128 संभावित वर्णों का वर्णन करती है, इसलिए 1 बिट हमेशा अप्रयुक्त है।
आप बस इस मामले में एक कलाकार का प्रदर्शन कर सकते हैं।
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, लैटिन -1, ANSI और कई अन्य एनकोडिंग सभी 8-बिट्स का उपयोग करते हैं। पहले 7-बिट ASCII तालिका का अनुसरण करते हैं और US-ASCII एन्कोडिंग के समान होते हैं। हालांकि, 8 वां बिट उन पात्रों को प्रदान करता है जो इन सभी एन्कोडिंग में भिन्न हैं। इसलिए, यहां चीजें दिलचस्प हैं।
यदि आप एक चरवाहे हैं, और आपको लगता है कि 8 वीं बिट कोई फर्क नहीं पड़ता है (यानी आप "आ, é, ç, è, ô ..." जैसे पात्रों के बारे में परवाह नहीं करते हैं) तो आप एक साधारण कलाकार के साथ दूर हो सकते हैं।
हालाँकि, यदि आप इसे पेशेवर रूप से करना चाहते हैं, तो आपको वास्तव में जब भी आप आयात / निर्यात पाठ (जैसे सॉकेट, फ़ाइलें ...) आयात करते हैं, तो आपको हमेशा एक चारसेट निर्दिष्ट करना चाहिए।
चलो गंभीर हो जाओ। उपरोक्त सभी विकल्प सस्ते ट्रिक्स हैं। यदि आप लचीला सॉफ़्टवेयर लिखना चाहते हैं, तो आपको अपने डेटा को आयात / निर्यात करने के लिए एक कॉन्फ़िगर करने योग्य चारसेट का समर्थन करने की आवश्यकता है। यहाँ एक सामान्य समाधान है:
एक byte[]बफर का उपयोग करके अपने डेटा को पढ़ें और String एक चारसेट पैरामीटर का उपयोग करके परिवर्तित करें ।
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
तुम भी InputStreamReaderएक charset पैरामीटर के साथ त्वरित किया जा सकता है जो उपयोग कर सकते हैं।
बस एक और सुनहरा नियम: कभी भी सीधे एक पात्र को बाइट नहीं दें। वह हमेशा एक गलती है।
उदाहरण के intलिए char, यह अनुमान लगाने के लिए कि उपयोगकर्ता केवल लिटरेरायल में रूपांतरित करना चाहते हैं, पर मेरा उत्तर देना
Input:
int i = 5;
Output:
char c = '5'
यह पहले से ही ऊपर उत्तर दिया गया है, हालांकि यदि पूर्णांक मूल्य i > 10, तो उपयोग करने की आवश्यकता है char array।
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
शायद सबसे तेज़ नहीं:
//for example there is an integer with the value of 5:
int i = 5;
//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0);
इंट या लॉन्ग में चारु के रूपांतरण का उत्तर साधारण कास्टिंग है।
उदाहरण के लिए: - यदि आप चार '0' को लंबे समय में बदलना चाहते हैं।
सरल कलाकारों का पालन करें
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
किया हुआ!!
public int read(char[] cbuf)करने से समस्या हल हो जाएगी?