সূচি অনুসারে স্ট্রিং চরিত্রটি পান - জাভা


230

আমি জানি যে কোনও স্ট্রিংয়ে কোনও নির্দিষ্ট চরিত্র বা সংখ্যার সূচকটি কীভাবে কাজ করতে হয়, তবে নবম অবস্থানে আমাকে চরিত্রটি দেওয়ার জন্য আমি কি কোনও পূর্বনির্ধারিত পদ্ধতি ব্যবহার করতে পারি ? সুতরাং "foo" স্ট্রিং-এ, আমি যদি সূচক 0 সহ বর্ণটি জিজ্ঞাসা করি তবে এটি "f" ফিরে আসবে।

দ্রষ্টব্য - উপরের প্রশ্নে, "চরিত্র" দ্বারা আমি চর ডেটা টাইপ বোঝাতে চাইছি না, তবে একটি স্ট্রিংয়ের মধ্যে একটি চিঠি বা সংখ্যা। এখানে গুরুত্বপূর্ণ বিষয় হ'ল পদ্ধতিটি চালিত হওয়ার সময় আমি কোনও গৃহস্থালি পাই না, তবে একটি স্ট্রিং (দৈর্ঘ্য 1)। এবং আমি সাবস্ট্রিং () পদ্ধতি সম্পর্কে জানি, তবে আমি ভাবছিলাম যে খুব ভাল উপায় আছে কিনা।


13
এইটা? উত্তরটি বেশ সোজা is
এমেট্রেন

আপনি কি খেয়াল করেছেন যে সে কোনও charমূল্য চায় না ? এবং তিনি কীভাবে করবেন তা জানেন substring()তবে কেবল একটি "সুন্দর" উপায় চান। এফওয়াইআই, আমি বলতে পারি substring()এটি সবচেয়ে নিকৃষ্টতম উপায়।
ব্যবহারকারী 845279

3
@ ব্যবহারকারী 845279 Character.toStringসমস্ত প্রয়োজনীয় প্রয়োজনীয়তা পূরণ করে এবং মোটেও অগোছালো নয়।
রিকার্ডো আলতামিরানো

@ পাইথনস্ক্রিপ্ট আমি সম্মত, তবে এটি substring()সরাসরি ব্যবহার করা থেকে আলাদা নয় ।
ব্যবহারকারী 845279

1
আমি এই পার্টিতে দেরি করেছি, তবে @ রিকার্ডো অল্টামিরানো একটু ভুল হয়েছে is endIndexএর (দ্বিতীয় প্যারামিটার) String.substring(int, int)একটি হল একচেটিয়া সূচক, এবং এটি করা হবে না জন্য একটি ব্যতিক্রম নিক্ষেপ index + 1যতদিন index < length()- যা এমনকি স্ট্রিং শেষ অক্ষর জন্য সত্য।
উইলিয়াম দাম

উত্তর:


339

আপনি যে পদ্ধতিটি সন্ধান করছেন তা হ'ল charAt। এখানে একটি উদাহরণ:

String text = "foo";
char charAtZero = text.charAt(0);
System.out.println(charAtZero); // Prints f

আরও তথ্যের জন্য, জাভা ডকুমেন্টেশন অন দেখুনString.charAt । আপনি যদি অন্য একটি সহজ টিউটোরিয়াল চান তবে এটি একটি বা এটি

আপনি যদি ফলাফলটি কোনও charডেটা টাইপ হিসাবে না, বরং স্ট্রিং হিসাবে দেখতে চান, তবে আপনি এই Character.toStringপদ্ধতিটি ব্যবহার করবেন :

String text = "foo";
String letter = Character.toString(text.charAt(0));
System.out.println(letter); // Prints f

আপনি যদি Characterক্লাস এবং toStringপদ্ধতি সম্পর্কে আরও তথ্য চান তবে আমি ক্যারেক্টার.টো স্ট্রিংয়ের ডকুমেন্টেশন থেকে আমার তথ্যটি টানলাম


1
"এখানে গুরুত্বপূর্ণ বিষয়টি হ'ল পদ্ধতিটি
চালিত

1
আমার মনে হয় সিলভাইন লেরক্সের উত্তরটি আরও ভাল। চরিত্র সম্পর্কে ডক
চাওজুন ঝং

আমি @ChaojunZhong সাথে একমত এই আরো একটি উপযুক্ত উত্তর যেহেতু এটি charAt ব্যবহার করতে () যদি আপনার সমস্যা হবে কারণ আপনি অক্ষর প্রয়োজন যে 2 কোড ইউনিট আছে যুক্তিযুক্ত নয়।
বিপুনজালান

43

তুমি চাও .charAt()

এখানে একটি টিউটোরিয়াল

"mystring".charAt(2)

আয় s

আপনি যদি স্ট্রিং রাখার ব্যাপারে নরক হন তবে চরকে স্ট্রিংয়ে রূপান্তর করার কয়েকটি উপায় রয়েছে:

String mychar = Character.toString("mystring".charAt(2));

অথবা

String mychar = ""+"mystring".charAt(2);

অথবা এমনকি

String mychar = String.valueOf("mystring".charAt(2));

উদাহরণ স্বরূপ.


@ এমট্রেন কি স্ট্রিং স্ট্রিং কনটেনটেশন পছন্দনীয় Character.toString?
রিকার্ডো আলতামিরানো

আমি মনে করি এটি ব্যক্তিগত পছন্দের বিষয়টিতে নেমে আসতে পারে। আপনিও করতে পারেনString mychar = String.valueOf("mystring".charAt(2));
এমেট্রেইন

বলতে গেলে, এই ক্ষেত্রে আমার ব্যক্তিগত পছন্দটি হবে String mychar = ""+"mystring".charAt(2);কারণ এটি সবচেয়ে সংক্ষিপ্ত। অন্যরা এ সম্পর্কে তাদের মতামতের মধ্যে পৃথক হবে।
এমেট্রেন

10

প্রস্তাবিত উত্তরগুলির কোনওটিই ইউনিকোড বেসিক মাল্টিলিগুয়াল প্লেনের বাইরে অক্ষরগুলি এনকোড করতে ব্যবহৃত সারোগেট জোড়গুলির জন্য কাজ করে না

একটি স্ট্রিংয়ের "অক্ষর" (পুনরায় জাভা 8 স্ট্রিম এপিআই ব্যবহার করে) এর পুনরাবৃত্তি করতে তিনটি ভিন্ন কৌশল ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হয়েছে। দয়া করে লক্ষ্য করুন যে এই উদাহরণটিতে ইউনিকোড পরিপূরক বহুভাষিক প্লেন (এসএমপি) এর অক্ষর রয়েছে। এই উদাহরণটি এবং ফলাফলটি সঠিকভাবে প্রদর্শন করতে আপনার একটি সঠিক ফন্ট দরকার।

// String containing characters of the Unicode 
// Supplementary Multilingual Plane (SMP)
// In that particular case, hieroglyphs.
String str = "The quick brown 𓃥 jumps over the lazy 𓊃𓍿𓅓𓃡";

চরগুলি পরিবেশন করা

প্রথম সমাধানটি সমস্ত charস্ট্রিংয়ের উপর একটি সাধারণ লুপ :

/* 1 */
System.out.println(
        "\n\nUsing char iterator (do not work for surrogate pairs !)");
for (int pos = 0; pos < str.length(); ++pos) {
    char c = str.charAt(pos);
    System.out.printf("%s ", Character.toString(c));
    //                       ^^^^^^^^^^^^^^^^^^^^^
    //                   Convert to String as per OP request
}

কোড পয়েন্ট আইট্রেট

দ্বিতীয় সমাধানটিও একটি স্পষ্ট লুপ ব্যবহার করে, তবে কোডপয়েন্টএটি সহ স্বতন্ত্র কোড পয়েন্টগুলি অ্যাক্সেস করে এবং সেই অনুযায়ী চারকাউন্টে লুপ সূচককে বাড়িয়ে তোলে :

/* 2 */
System.out.println(
        "\n\nUsing Java 1.5 codePointAt(works as expected)");
for (int pos = 0; pos < str.length();) {
    int cp = str.codePointAt(pos);

    char    chars[] = Character.toChars(cp);
    //                ^^^^^^^^^^^^^^^^^^^^^
    //               Convert to a `char[]`
    //               as code points outside the Unicode BMP
    //               will map to more than one Java `char`
    System.out.printf("%s ", new String(chars));
    //                       ^^^^^^^^^^^^^^^^^
    //               Convert to String as per OP request

    pos += Character.charCount(cp);
    //     ^^^^^^^^^^^^^^^^^^^^^^^
    //    Increment pos by 1 of more depending
    //    the number of Java `char` required to
    //    encode that particular codepoint.
}

স্ট্রিম এপিআই ব্যবহার করে কোড পয়েন্ট ওভারেট করুন

তৃতীয় সমাধানটি মূলত দ্বিতীয়টির মতো তবে জাভা 8 স্ট্রিম এপিআই ব্যবহার করে :

/* 3 */
System.out.println(
        "\n\nUsing Java 8 stream (works as expected)");
str.codePoints().forEach(
    cp -> {
        char    chars[] = Character.toChars(cp);
        //                ^^^^^^^^^^^^^^^^^^^^^
        //               Convert to a `char[]`
        //               as code points outside the Unicode BMP
        //               will map to more than one Java `char`
        System.out.printf("%s ", new String(chars));
        //                       ^^^^^^^^^^^^^^^^^
        //               Convert to String as per OP request
    });

ফলাফল

আপনি যখন এই পরীক্ষা প্রোগ্রামটি চালান, আপনি পাবেন:

Using char iterator (do not work for surrogate pairs !)
T h e   q u i c k   b r o w n   ? ?   j u m p s   o v e r   t h e   l a z y   ? ? ? ? ? ? ? ? 

Using Java 1.5 codePointAt(works as expected)
T h e   q u i c k   b r o w n   𓃥   j u m p s   o v e r   t h e   l a z y   𓊃 𓍿 𓅓 𓃡 

Using Java 8 stream (works as expected)
T h e   q u i c k   b r o w n   𓃥   j u m p s   o v e r   t h e   l a z y   𓊃 𓍿 𓅓 𓃡 

আপনি দেখতে পাচ্ছেন (আপনি যদি হায়রোগ্লিফগুলি সঠিকভাবে প্রদর্শন করতে সক্ষম হন), প্রথম সমাধানটি ইউনিকোড বিএমপির বাইরে সঠিকভাবে অক্ষরগুলি পরিচালনা করে না। অন্যদিকে, অন্য দুটি সমাধান সারোগেট জোড়গুলির সাথে ভালভাবে ডিল করে।


8

substring()আপনার প্রয়োজনীয়তাগুলি বিবেচনা করে আপনি বেশ আটকে আছেন । মানক উপায়টি হবে charAt()তবে আপনি বলেছিলেন যে আপনি কোনও চর ডেটা টাইপ গ্রহণ করবেন না।


যথেষ্ট ফর্সা। তবে, যেহেতু চরটি আদিম ধরনের, তাই আমি ধরে নিই যে toString()এটি এতে কাজ করবে না এবং valueOf()এটি কেবল সংখ্যার জন্য (আমার ধারণা, আমি ভুল হতে পারি), সুতরাং আমি কীভাবে একটি চরকে স্ট্রিতে রূপান্তর করব?
ব্লুফায়ার

চরিত্র "উপরের প্রশ্ন দ্বারা, মধ্যে" "আমি গৃহস্থালির কাজ ডাটা টাইপ মানে না" - আমি এই পড়া না "আমি একটি গ্রহণ করবে না char"
ametren

@ ব্লুফায়ার আমার উত্তর দেখুন। Character.toStringকাজ করা উচিত (এটি Characterক্লাস থেকে স্থিতিশীল পদ্ধতি
রিকার্ডো আলতামিরানো


5

charAtচর না পাওয়ার আপনার প্রয়োজনের সাথে একত্রে একটি হাইব্রিড পদ্ধতির উপায় হতে পারে

newstring = String.valueOf("foo".charAt(0));

তবে এটি সত্যি বলতে "পরিষ্কার" নয় substring()be



4

এখানে সঠিক কোড। আপনি যদি জাইবুক ব্যবহার করছেন তবে এটি সমস্ত সমস্যার উত্তর দেবে।

for (int i = 0; i<passCode.length(); i++)
{
    char letter = passCode.charAt(i);
    if (letter == ' ' )
    {
        System.out.println("Space at " + i);
    }
}

0

যদি কেউ কোটলিনের সাথে লড়াই করে তবে কোডটি হ'ল:

var oldStr: String = "kotlin"
var firstChar: String = oldStr.elementAt(0).toString()
Log.d("firstChar", firstChar.toString())

এই স্থানে 1 তে চরটি ফিরিয়ে দেবে, এক্ষেত্রে কে মনে রাখবেন, সূচকটি 0-তে শুরু হয়, সুতরাং এই নমুনায়: কোটলিন হবে কে = অবস্থান 0, o = অবস্থান 1, t = অবস্থান 2, l = অবস্থান 3, i = অবস্থান 4 এবং n = অবস্থান 5


-3

এটার মত:

String a ="hh1hhhhhhhh";
char s = a.charAt(3);

ওপি জানিয়েছে যে String1 দৈর্ঘ্যের একটি পছন্দসই, ক নয়char
উইলিয়াম দাম

অনুমোদিত 6 টি সহ আরও 6 টি উত্তর charAt()একটি সম্ভাব্য সমাধান হিসাবে প্রস্তাবিত । এই উত্তরটি কী যুক্ত করে?
ড্যান গেটেজ

6
এছাড়াও, দেখে মনে হচ্ছে আপনি ইঙ্গিত দিচ্ছেন যে charAt()1-ভিত্তিক সূচকগুলি ব্যবহার aকরে, তৃতীয় অবস্থানে একমাত্র পৃথক চরিত্র রেখে। যদি এটি সত্য হয় তবে আপনার ইঙ্গিত করার চেয়ে এটি বলার বা ব্যাখ্যা করা ভাল। বাস্তবে এটি সত্য নয় : charAt()0-ভিত্তিক সূচকগুলি ব্যবহার করে, তাই sহবে 'h'
ড্যান গেটেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.