এটি সম্ভবত অন্য কোথা থেকে উত্তর দেওয়া হয়েছে তবে আপনি কীভাবে কোনও মান মানের চরিত্রের মান পাবেন?
বিশেষত আমি একটি টিসিপি স্ট্রিম থেকে একটি পড়ছি এবং পাঠকগুলি read
আমি এটি থেকে একটি চর কীভাবে পেতে পারি?
এটি সম্ভবত অন্য কোথা থেকে উত্তর দেওয়া হয়েছে তবে আপনি কীভাবে কোনও মান মানের চরিত্রের মান পাবেন?
বিশেষত আমি একটি টিসিপি স্ট্রিম থেকে একটি পড়ছি এবং পাঠকগুলি read
আমি এটি থেকে একটি চর কীভাবে পেতে পারি?
উত্তর:
আপনি যদি কোনও স্ট্রিমটিকে পাঠ্যে রূপান্তর করতে চাইছেন তবে আপনি কোন এনকোডিংটি ব্যবহার করতে চান সে সম্পর্কে আপনাকে সচেতন হওয়া দরকার। তারপরে আপনি হয় Stringকনস্ট্রাক্টরে একটি বাইটের অ্যারে পাস করতে পারেন এবং একটি সরবরাহ Charsetকরতে পারেন, বা তার পরিবর্তে InputStreamReaderযথাযথ ব্যবহার করতে পারেন Charset।
কেবলমাত্র থেকে কাস্ট intকরার charএকমাত্র কাজ যদি তুমি চাও ISO-8859-1- যদি তুমি পড়া সরাসরি একটি স্ট্রীম থেকে বাইট।
সম্পাদনা করুন: আপনি যদি হয় ইতিমধ্যে একটি ব্যবহার Reader, তারপর ফেরত মান ভোটদান read()থেকে char(চেক কিনা এটা -1 বা না পরে) দিক থেকে ঠিক পন্থা ... কিন্তু এটা সাধারণত আরো দক্ষ এবং সুবিধাজনক ডাকতে read(char[], int, int)একটি সম্পূর্ণ ব্লক পড়তে একসাথে পাঠ্য কতগুলি অক্ষর পড়েছে তা দেখতে, যদিও ফেরতের মানটি পরীক্ষা করতে ভুলবেন না।
InputStreamReaderএকটি BufferedReader, যেমন javadoc উল্লেখ docs.oracle.com/javase/8/docs/api/java/io/...
আপনি চাইছেন:
Character.toChars(65) // returns ['A']
অধিক তথ্য: Character.toChars(int codePoint)
নির্দিষ্ট অক্ষরটিকে (ইউনিকোড কোড পয়েন্ট) রূপান্তর করে তার চর অ্যারেতে সঞ্চিত এটির UTF-16 উপস্থাপনায়। যদি নির্দিষ্ট কোড পয়েন্টটি একটি বিএমপি (বেসিক বহুভাষিক প্লেন বা প্লেন 0) মান হয় তবে ফলাফল প্রাপ্ত অ্যারেটির কোডপয়েন্টের সমান মান থাকে। যদি নির্দিষ্ট কোড পয়েন্টটি পরিপূরক কোড পয়েন্ট হয় তবে ফলিত চর অ্যারেতে সংশ্লিষ্ট সারোগেট জুটি থাকে।
toCharsকরা সাধারণত অনুচিত inappropriate তিনি যদি কোনও পাঠকের কাছ থেকে পড়ে থাকেন তবে ঠিক আছে।
এটি "ইন্টকে চরে রূপান্তর করুন" দ্বারা আপনি কী বোঝাতে চান তার উপর নির্ভর করে।
যদি আপনি কেবল ইনট এ মান castালতে চান তবে আপনি জাভার টাইপকাস্ট স্বরলিপি ব্যবহার করে এটি কাস্ট করতে পারেন:
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';
সাধারণ ingালাই:
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-বিট চরিত্রের সাথে সংযুক্ত করবে।
ইউএস-এএসসিআইআই 1 টি অক্ষর এনকোড করার জন্য 8 টি বিট সংরক্ষণ করে। ASCII টেবিলটি কেবলমাত্র 128 টি সম্ভাব্য অক্ষর বর্ণনা করে, তাই 1 বিট সর্বদা অব্যবহৃত থাকে।
আপনি কেবল এক্ষেত্রে একটি কাস্ট অভিনয় করতে পারেন।
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
ইউটিএফ -8, ল্যাটিন -1, এএনএসআই এবং আরও অনেক এনকোডিং সমস্ত 8-বিট ব্যবহার করে। প্রথম 7-বিট ASCII টেবিলটি অনুসরণ করে এবং US-ASCII এনকোডিংয়ের মতো হয় ident যাইহোক, অষ্টম বিট এমন সমস্ত অক্ষর সরবরাহ করে যা এই সমস্ত এনকোডিংগুলিতে আলাদা। সুতরাং, এখানে জিনিস আকর্ষণীয় পেতে।
আপনি যদি কাউবয় হন এবং আপনি মনে করেন যে 8 তম বিটটি কিছু যায় আসে না (যেমন আপনি "à, é, ç, è, ô ... like এর মতো চরিত্রগুলি সম্পর্কে চিন্তা করেন না) তবে আপনি একটি সহজ নিক্ষেপ করে দূরে যেতে পারেন।
তবে আপনি যদি পেশাদারভাবে এটি করতে চান তবে আপনি যখনই আমদানি / রফতানি পাঠ্য आयात করেন (যেমন সকেট, ফাইল ...) অবশ্যই আপনার অবশ্যই একটি চরসেট নির্দিষ্ট করা উচিত।
আসুন সিরিয়াস হয়ে যাই। উপরের সমস্ত বিকল্প সস্তা কৌশল। আপনি যদি নমনীয় সফ্টওয়্যারটি লিখতে চান তবে আপনার ডেটা আমদানি / রফতানি করতে আপনার একটি কনফিগারযোগ্য চরসেট সমর্থন করতে হবে। একটি জেনেরিক সমাধান এখানে:
byte[]বাফার ব্যবহার করে আপনার ডেটা পড়ুন এবং String এটিকে চরসেট প্যারামিটার ব্যবহার করে রূপান্তর করতে ।
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
InputStreamReaderচরসেট প্যারামিটার দিয়ে ইনস্ট্যান্ট করা যেতে পারে এমনটিও আপনি ব্যবহার করতে পারেন।
আরও একটি সুবর্ণ নিয়ম: সরাসরি কোনও চরিত্রের কাছে সরাসরি বাইট দেবেন না। এটা সর্বদা একটি ভুল।
ভাবনাটি হলো এই যে ব্যবহারকারী এইমাত্র literaaly একটি রূপান্তর করতে চেয়েছিলেন উপর আমার উত্তর ভিত্তিবিন্দু 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' কে দীর্ঘ রূপান্তর করতে চান।
সরল castালাই অনুসরণ করুন
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
সম্পন্ন!!
public int read(char[] cbuf)করলে সমস্যার সমাধান হবে?