জাভাতে চরে রূপান্তর করুন


124

নীচে একটি কোড স্নিপেট রয়েছে,

int a = 1;
char b = (char) a;
System.out.println(b);

তবে আমি যা পাই তা খালি আউটপুট।

int a = '1';
char b = (char) a;
System.out.println(b);

আমি আমার আউটপুট হিসাবে 1 পাবেন।

কেউ এই ব্যাখ্যা করতে পারেন? এবং যদি আমি প্রথম স্নিপেটের মতো কোনও চরকে কোনও চরকে রূপান্তর করতে চাই, তবে আমার কী করা উচিত?


9
"কোন চরে রূপান্তর করুন? " সম্ভবত b = (char)('0' + a)তবে কেবল এটির জন্য 0 <= a <= 9
johnchen902

6
দশমিক মান 01 একটি প্রিন্টিং অক্ষর; এটি সঠিকভাবে কাজ করছে
এপ্রিয়েটার

উত্তর:


109
int a = 1;
char b = (char) a;
System.out.println(b);

ascii মান 1 দিয়ে চারটি মুদ্রণ করবে (শিরোনামের চরটি, যা মুদ্রণযোগ্য নয়)।

int a = '1';
char b = (char) a;
System.out.println(b);

আসকি মান 49 দিয়ে চারটি মুদ্রণ করবে ('1' এর সাথে মিলিয়ে)

আপনি যদি একটি অঙ্ক (0-9) রূপান্তর করতে চান তবে আপনি এটিতে 48 যুক্ত করতে এবং কাস্ট করতে পারেন বা এর মতো কিছু করতে পারেন Character.forDigit(a, 10);

আপনি যদি intascii মান হিসাবে রূপান্তর করতে চান , আপনি Character.toChars(48)উদাহরণস্বরূপ ব্যবহার করতে পারেন ।


2
System.out.println('b'+3);কীভাবে আমি পেতে পারেন b3পরিবর্তে 101println ব্যবহার করে? পরিবর্তে অন্য কোনও উপায়ে প্রিন্টফ?
আসিফ মোশতাক

2
@ পরিচিত
হ্যাগ্রা

Character.toCharsইউনিকোড কোড পয়েন্টগুলিতে কাজ করে, এএসসিআইআই মানগুলি নয়। আপনি কেবল (কেবলমাত্র বিএমপির জন্য) কেবলমাত্র চারটিতে প্রবেশদ্বারটি দিলে আপনি একই পাবেন।
দুর্বলস্পেস

55

আমার উত্তর jh314 এর উত্তরের অনুরূপ তবে আমি আরও গভীরভাবে ব্যাখ্যা করব।

এই ক্ষেত্রে আপনার যা করা উচিত তা হ'ল:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

এখানে, আমরা '0' ব্যবহার করেছি কারণ চরগুলি আসলে ASCII মান দ্বারা প্রতিনিধিত্ব করা হয়। '0' একটি চর এবং 48 এর মান দ্বারা প্রতিনিধিত্ব করে।

আমরা টাইপ করেছি (a + '0')এবং এগুলি যুক্ত করার জন্য, জাভা '0' কে তার ASCII মানতে রূপান্তর করে যা 48 এবং a 1 হয় তাই যোগফল 49 হয়। তবে আমরা যা করেছি তা হ'ল:

(char)(49)

আমরা casted intকরতে char। 49 এর সমতুল্য ASCII '1'। আপনি যে কোনও সংখ্যাকে এইভাবে চরে রূপান্তর করতে পারেন এবং .toString()পদ্ধতিটি ব্যবহার করে এবং তারপরে পদ্ধতিতে অঙ্কটি বিয়োগের চেয়ে স্মার্ট এবং ভালতর উপায় .charAt()


42

দেখে মনে হচ্ছে আপনি Character.forDigitপদ্ধতিটি সন্ধান করছেন:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

এখানে একটি পদ্ধতি রয়েছে যা চর থেকে ফিরে কোন ইনটে রূপান্তর করতে পারে:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

মনে রাখবেন যে পরিবর্তন করে RADIXআপনি হেক্সাডেসিমাল (16 টি মূল) এবং যে কোনও র‌ডিক্স 36 পর্যন্ত (বা Character.MAX_RADIXএটি হিসাবে পরিচিত হিসাবেও) সমর্থন করতে পারেন ।


@ প্রোগ্রামামনবুব "ইনটেলের মান" সংজ্ঞায়িত করুন। .আপনি চান না যে এটি 4 অঙ্কটি মুদ্রণ করবে? অথবা আপনি, int- এর ASCII মান প্রিন্ট যাতে চাই 65কপি করে প্রিন্ট A? কারণ এখানে আমার উত্তরটি এই প্রশ্নের প্রয়োজনীয়তার জন্য প্রত্যাশিত আচরণকে মুদ্রণ করে। আইডিয়োনে ডটকম
সায়মন ফোর্সবার্গ

10
int a = 1;
char b = (char) a;
System.out.println(b);

হোল, ভাল আমি একই সমস্যার মধ্যে দিয়ে গিয়েছিলাম কিন্তু আমি যা করেছি তা ছিল নিম্নলিখিত কোড।

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

এটির সাহায্যে আপনি অক্ষরের ধরণের হিসাবে দশমিক মান পাবেন। আমি সূচি 0 সহ চরআউট () ব্যবহার করেছি কারণ স্ট্রিংয়ের একমাত্র মান 'এ' এবং আপনি জানেন যে স্ট্রিংয়ের 'ক' এর অবস্থান 0 থেকে শুরু হয়।

দুঃখিত যদি আমার ইংরেজিটি ভালভাবে ব্যাখ্যা না করা হয় তবে আশা করি এটি আপনাকে সহায়তা করবে।


3
int a = 1;
char b = (char) (a + 48);

এএসসিআইআই-তে প্রতিটি চরের নিজস্ব নম্বর রয়েছে। এবং চর '0' দশমিকের 48, '1' 49, এবং আরও অনেক কিছু। তাই যদি

char b = '2';
int a = b = 50;

1

এখানে প্রকৃত "প্রশ্নের" উত্তর কেউই দেয়নি: আপনি সঠিকভাবে চারে রূপান্তর করছেন; ASCII টেবিলের মধ্যে একটি দশমিক মান হ'ল "শিরোনামের শুরু", একটি মুদ্রনবিহীন অক্ষর। একটি ASCII টেবিলটি অনুসন্ধান করার চেষ্টা করুন এবং 33 এবং 7E এর মধ্যে কোনও মান মান রূপান্তর করতে চেষ্টা করুন; যা আপনাকে দেখার জন্য চরিত্রগুলি দেবে।


1

আপনি যখনই চরিত্রে কাস্ট পূর্ণসংখ্যা টাইপ করেন তখন এটির পূর্বের আস্কির মানটি ফিরে আসবে (আরও ভাল বোঝার জন্য একবার আসকি টেবিলটি দিয়ে যান)

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
বাছাই করুন .... charএকটি ইউটিএফ -16 কোড ইউনিট। ইউটিএফ -16 কোড ইউনিট হিসাবে 68 হ'ল ইউনিকোড কোডপয়েন্ট U + 0044 উপস্থাপনের জন্য প্রয়োজনীয় একমাত্র কোড ইউনিট । System.out পাঠ্যের এনকোডিংটিকে ডিফল্ট এনকোডিংয়ে পরিবর্তন করবে (সম্ভবত প্রোগ্রামটি টার্মিনাল / কনসোলের সাথে মেলে)। println একটি চর নেয় এবং এটি এনকোড করার চেষ্টা করে। চরটি একটি সম্পূর্ণ কোডপয়েন্ট হিসাবে, এটি চেষ্টা করতে পারে। যেহেতু ইউ + 0044 প্রায় সমস্ত চরিত্রের সেটগুলিতে একটি চরিত্র, তাই এটি টার্মিনালটিকে অবারিত করার ক্ষেত্রে সাফল্য হওয়া উচিত। এএসসিআইআইয়ের সাথে কিছুই করার নেই।
টম ব্লডজেট

0

জাভাতে একটি চর একটি অন্তর্নির্মিত হয় । আপনার প্রথম স্নিপেট ডিফল্ট অক্ষর এনকোডিং স্কিমের (যা সম্ভবত ইউনিকোড) 1 এর সাথে সম্পর্কিত অক্ষরটি মুদ্রণ করে। ইউনিকোড অক্ষর ইউ + 0001 হ'ল একটি প্রিন্টিং অক্ষর, এজন্য আপনি কোনও আউটপুট দেখতে পাচ্ছেন না।

আপনি যদি '1' অক্ষরটি মুদ্রণ করতে চান তবে আপনি যে এনকোডিং স্কিমটি ব্যবহার করছেন তাতে '1' এর মান সন্ধান করতে পারেন। ইউনিকোডে এটি 49 (এএসসিআইআই এর সমান)। তবে এটি কেবল 0-9 অঙ্কের জন্য কাজ করবে।

আপনি চরটির চেয়ে স্ট্রিং ব্যবহার করা এবং জাভার অন্তর্নির্মিত toString()পদ্ধতিটি ব্যবহার করা ভাল better

int a = 1;
String b = toString(a);
System.out.println(b);

এটি আপনার সিস্টেমের এনকোডিং যা-যা কাজ করবে এবং বহু-সংখ্যা সংখ্যার জন্য কাজ করবে।


1
দুঃখিত, তবে একটি গৃহস্থালি অন্তর্নিহিত নয়, কারণ এটি বিভিন্ন সংখ্যক বাইট (দ্রুত রেফারেন্স। চর-ইন উপস্থাপনা - স্ট্যাকওভারফ্লো ) দ্বারা তৈরি। একটি চর একটি সংখ্যা দ্বারা প্রতিনিধিত্ব করা যেতে পারে, আপনি সঠিক, কিন্তু এটি একটি পূর্ণসংখ্যা নয়।
morels

এছাড়াও, আমি মনে করি আপনি দ্বিতীয় লাইনে "স্ট্রিং বি = ইন্টিজার.টোস্ট্রিং (এ)" পড়া উচিত;
ত্রুটিযুক্ত

চর ডেটা টাইপটি জাভা.লাং.চ্যারাক্টারে পাশাপাশি ইন্টি এবং ইউনিকোড কোড পয়েন্ট এবং কোড ইউনিটের সাথে এর সম্পর্কটি ভালভাবে সংজ্ঞায়িত ।
আয়ান

0

আপনি যদি তাদের ascii কোডের ভিত্তিতে ascii অক্ষর মুদ্রণ করতে চান এবং এর বাইরে যেতে চান না (ইউনিকোড অক্ষরগুলির মতো), আপনি আপনার পরিবর্তনশীলটিকে বাইট হিসাবে সংজ্ঞায়িত করতে পারেন এবং তারপরে (চর) রূপান্তরটি ব্যবহার করতে পারেন। অর্থাৎ,

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

বিটিডাব্লু, 'এ' বর্ণের আসকি কোডটি 65


0

বর্ণমালা / অক্ষরের পূর্ণসংখ্যা মান ASCII মান কিনা তা নিশ্চিত করুন value

যদি না হয় তবে এটি তৈরি করুন।

for e.g. if int i=1

তারপরে এটিতে 64 যুক্ত করুন যাতে এটি 'এ' এর 65 = ASCII মান হয়ে যায় তারপরে ব্যবহার করুন

char x = (char)i;

print x

// 'A' will be printed 

0

আমরা যদি ক্লাসের প্রকারের কথা বলছি - আদিম নয়, নিম্নলিখিত কৌশলটি করতে হবে:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

প্রক্রিয়াটিতে এটিকে একটি স্ট্রিং তৈরি করার দরকার নেই এবং আপনার প্যারেন্টেসিসের সংখ্যার মিল নেই।
সাইমন ফোরসবার্গ

সাইমন, "প্রথম বন্ধনী"। পরামর্শ দিলে কেমন হয়?
মতুয়া

-1

সম্পূর্ণ রূপান্তর ধারণার জন্য নিম্নলিখিত প্রোগ্রামটি দেখুন

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

আশা করি, এটি কমপক্ষে কিছু সাহায্য করবে


-2

আপনি যদি কোনও চরিত্রকে এর সাথে সম্পর্কিত পূর্ণসংখ্যায় রূপান্তর করতে চান তবে আপনি এরকম কিছু করতে পারেন:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

এটি ঘটে কারণ ASCII এ এমন কিছু আইটেম রয়েছে যা সাধারণত মুদ্রণ করা যায় না।

উদাহরণস্বরূপ, 97 থেকে 122 নম্বরগুলি হ'ল ছোট অক্ষরের সাথে এক থেকে z এর সাথে সংখ্যার পূর্ণসংখ্যা।


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
দয়া করে কেবল একটি কোড ডাম্পের পরিবর্তে একটি ব্যাখ্যা সরবরাহ করুন।
জুলস ডুপন্ট

যদিও এই কোড-কেবল পোস্টটি প্রশ্নের উত্তর দিতে পারে, দয়া করে এটি কেন হয় তার একটি ব্যাখ্যা যুক্ত করুন। এটি ভবিষ্যতের ব্যবহারকারীদের তাদের অবস্থার জন্য উত্তরটি মূল্যায়নে সহায়তা করবে।
টম ব্রুনবার্গ 3'18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.