সুতরাং আমি স্ট্রিং প্রতিটি অক্ষরের জন্য পুনরাবৃত্তি করতে চান।
তাই আমি ভাবলাম:
for (char c : "xyz")
তবে আমি একটি সংকলক ত্রুটি পেয়েছি:
MyClass.java:20: foreach not applicable to expression type
কিভাবে আমি এটি করতে পারব?
সুতরাং আমি স্ট্রিং প্রতিটি অক্ষরের জন্য পুনরাবৃত্তি করতে চান।
তাই আমি ভাবলাম:
for (char c : "xyz")
তবে আমি একটি সংকলক ত্রুটি পেয়েছি:
MyClass.java:20: foreach not applicable to expression type
কিভাবে আমি এটি করতে পারব?
উত্তর:
একেকজনের char
মধ্যে প্রত্যেকের জন্য সহজ উপায়টি String
হ'ল toCharArray()
:
for (char ch: "xyz".toCharArray()) {
}
এটি আপনাকে প্রতিটি নির্মাণের সংক্ষিপ্ততা দেয়, তবে দুর্ভাগ্যক্রমে String
(যা অপরিবর্তনীয়) জেনারেট করার জন্য একটি প্রতিরক্ষামূলক অনুলিপি সম্পাদন করতে হবে char[]
(যা পরিবর্তনীয়) তাই কিছু ব্যয় দণ্ডও রয়েছে।
ডকুমেন্টেশন থেকে :
একটি নতুন বরাদ্দকৃত অক্ষরের অ্যারে [
toCharArray()
ফিরিয়ে দেয়] যার দৈর্ঘ্য এই স্ট্রিংয়ের দৈর্ঘ্য এবং যার স্ট্রিং দ্বারা প্রতিনিধিত্ব করা অক্ষরের ক্রম ধারণ করতে বিষয়বস্তু সূচনা করা হয়েছে।
অ্যারেতে অক্ষরগুলি দিয়ে পুনরাবৃত্তি করার আরও ভার্জিক পদ্ধতি রয়েছে (লুপের জন্য নিয়মিত CharacterIterator
ইত্যাদি) তবে আপনি যদি toCharArray()
প্রতিটিটির জন্য মূল্য দিতে চান তবে সর্বাধিক সংক্ষিপ্ত।
toCharArray( )
3 বার বলা হয়?
211900000
সাথে সম্পূর্ণ for (char c : str.toCharArray()) { }
হতে সময়টি 250 মিলিয়ন ডলার এবং সম্পূর্ণ হতে সময়টি for (char c : charArray) { }
<10 মিমি । অবশ্যই, এই সময়ের মানগুলি হার্ডওয়্যারের উপর নির্ভর করবে তবে গ্রহণযোগ্যতাটি হ'ল একটি পদ্ধতি অন্যটির চেয়ে উল্লেখযোগ্যভাবে ব্যয়বহুল।
toCharArray()
লুপের দেহের ভিতরে নেই ; এটিকে কেবল একবার ডাকা হয় এবং তারপরে লুপটি ফলাফলের অ্যারেতে পুনরাবৃত্তি করে। (জন্য-প্রতিটি লুপ সাধারণ থেকে ভিন্ন for
-loop, যা স্টপ শর্ত প্রতিটি পুনরাবৃত্তির মূল্যায়ন করে।)
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
}
আর একটি দরকারী সমাধান, আপনি স্ট্রিংয়ের অ্যারে হিসাবে এই স্ট্রিংয়ের সাথে কাজ করতে পারেন
for (String s : "xyz".split("")) {
System.out.println(s);
}
split()
একাধিক জাভা চরিত্রের মানচিত্র করে, যা প্রায় সমস্ত ইমোটিকনের ক্ষেত্রে। উদাহরণস্বরূপ, আপনার উদাহরণের এই প্রকরণটি তিনটি নয় চারবার লুপ করবে:for (String s : "x😁z".split("")) { System.out.println(s); }
toCharArray
স্ট্রিং ক্লাসের () পদ্ধতিটি ব্যবহার করে আপনাকে স্ট্রিং অবজেক্টটিকে চরের অ্যারে রূপান্তর করতে হবে :
String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char
// iterate over the array using the for-each loop.
for(char c: arr){
System.out.println(c);
}
ইন জাভা 8 আমরা এটা যেমন সমাধান করতে পারে:
String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
পদ্ধতি অক্ষর () ডকটিতেIntStream
উল্লিখিত হিসাবে ফিরিয়ে দেয় :
এই ক্রম থেকে চার মানগুলি শূন্য-প্রসারিত করার একটি স্রোত প্রদান করে। যে কোনও চর যা কোনও সারোগেট কোড পয়েন্টে মানচিত্রগুলি ব্যাখ্যা ছাড়াই পাস করা হয়। স্রোতটি পড়ার সময় যদি ক্রমটি পরিবর্তিত হয় তবে ফলাফলটি সংজ্ঞায়িত হয়।
forEachOrdered
এবং না forEach
?এর আচরণটি forEach
সুস্পষ্টভাবে নিরপেক্ষবাদী যেখানে forEachOrdered
স্ট্রিমটির প্রতিটি ক্রমের জন্য যখন এই স্ট্রিমের প্রতিটি উপাদানটির জন্য ক্রিয়া সম্পাদন করে, স্ট্রিমের এনকাউন্টার অর্ডে যদি স্ট্রিমের একটি সংজ্ঞায়িত ক্রম থাকে order সুতরাং forEach
আদেশ রাখা হবে যে গ্যারান্টি দেয় না। আরও এই প্রশ্নটি দেখুন।
আমরা codePoints()
মুদ্রণের জন্যও ব্যবহার করতে পারি, আরও তথ্যের জন্য এই উত্তরটি দেখুন।
দুর্ভাগ্যক্রমে জাভা String
বাস্তবায়ন করে না Iterable<Character>
। এটি সহজেই করা যেতে পারে। এমন কি আছে যা StringCharacterIterator
বাস্তবায়নও করে না Iterator
... সুতরাং নিজের তৈরি করুন:
public class CharSequenceCharacterIterable implements Iterable<Character> {
private CharSequence cs;
public CharSequenceCharacterIterable(CharSequence cs) {
this.cs = cs;
}
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < cs.length();
}
@Override
public Character next() {
return cs.charAt(index++);
}
};
}
}
এখন আপনি (কিছুটা) সহজেই চালাতে পারবেন for (char c : new CharSequenceCharacterIterable("xyz"))
...
আপনি জাভা 8 ব্যবহার করেন, তাহলে আপনি ব্যবহার করতে পারেন chars()
একটি উপর String
একটি পেতে Stream
অক্ষরের, কিন্তু আপনি নিক্ষেপ করতে হবে int
একটি ফিরে char
হিসাবে chars()
আয় একটি IntStream
।
"xyz".chars().forEach(i -> System.out.print((char)i));
আপনি যদি জাভা 8 ব্যবহার করে Eclipse সংগ্রহে , আপনি একটি ল্যাম্বদা বা পদ্ধতি রেফারেন্স সহ CharAdapter
শ্রেণীর forEach
পদ্ধতিটি a এর সমস্ত অক্ষরের উপরে পুনরাবৃত্তি করতে ব্যবহার করতে পারেন String
।
Strings.asChars("xyz").forEach(c -> System.out.print(c));
এই নির্দিষ্ট উদাহরণটি একটি পদ্ধতি রেফারেন্সও ব্যবহার করতে পারে।
Strings.asChars("xyz").forEach(System.out::print)
দ্রষ্টব্য: আমি গ্রহগ্রাহ সংগ্রহের প্রতিশ্রুতিবদ্ধ।
আপনি এই ক্ষেত্রে একটি ল্যাম্বডা ব্যবহার করতে পারেন।
String s = "xyz";
IntStream.range(0, s.length()).forEach(i -> {
char c = s.charAt(i);
});
ট্র্যাভার্সের জন্য একটি স্ট্রিং আপনি charAt()
স্ট্রিংয়ের সাথেও ব্যবহার করতে পারেন ।
পছন্দ:
String str = "xyz"; // given String
char st = str.charAt(0); // for example we take 0 index element
System.out.println(st); // print the char at 0 index
charAt()
জাভাতে স্ট্রিং হ্যান্ডলিংয়ের পদ্ধতি যা নির্দিষ্ট অক্ষরের জন্য স্ট্রিংকে ট্র্যাভার্স করতে সহায়তা করে।
for (char st: "xyz".toCharArray()) {}
জানেন?