আমার একটি স্ট্রিংকে একক অক্ষর স্ট্রিংয়ের অ্যারেতে বিভক্ত করতে হবে।
উদাহরণস্বরূপ, বিড়াল "বিড়াল" অ্যারে "সি", "এ", "টি" দেবে
.split("")
এটি করবে।
আমার একটি স্ট্রিংকে একক অক্ষর স্ট্রিংয়ের অ্যারেতে বিভক্ত করতে হবে।
উদাহরণস্বরূপ, বিড়াল "বিড়াল" অ্যারে "সি", "এ", "টি" দেবে
.split("")
এটি করবে।
উত্তর:
"cat".split("(?!^)")
এটি উত্পাদন করবে
অ্যারে ["সি", "এ", "টি"]
(?!
... )
এটি একটি নেতিবাচক দৃser়তার জন্য রিজেক্স সিনট্যাক্স - এটি দৃser়ভাবে জানিয়েছে যে এর ভিতরে যা আছে তার কোনও মিল নেই। এবং ^
স্ট্রিংয়ের শুরুর সাথে মিলে যায় তাই রেজেক্স প্রতিটি অবস্থানের সাথে মেলে যা স্ট্রিংয়ের শুরু নয় এবং সেখানে একটি বিভাজন সন্নিবেশ করায়। এই রেজেক্সটি স্ট্রিংয়ের শেষেও মেলে এবং ফলস্বরূপ একটি ফাঁকা স্ট্রিং যুক্ত করে, String.split
ডকুমেন্টেশনটি বলে যে "ফাঁকা স্ট্রিংগুলি অনুসরণ করে ফলাফলের অ্যারেতে অন্তর্ভুক্ত করা হয়নি" except
String.split
সামান্য এতটা পাল্টে দেয় যে নেতৃস্থানীয় খালি একটি শূন্য-চওড়া ম্যাচ এছাড়াও ফলাফলের অ্যারের মধ্যে অন্তর্ভুক্ত করা হয় না দ্বারা উত্পাদিত স্ট্রিং, তাই (?!^)
কথন অবস্থান স্ট্রিংয়ের শুরু নয় যে হয়ে অপ্রয়োজনীয়, এর Regex যার ফলে কিছুই সরল করা - "cat".split("")
- কিন্তু জাভা 7 এবং নীচে যা ফলাফল অ্যারে একটি নেতৃস্থানীয় খালি স্ট্রিং উত্পাদন করে।
"cat".toCharArray()
তবে আপনার যদি স্ট্রিং দরকার হয়
"cat".split("")
সম্পাদনা করুন: যা খালি প্রথম মানটি প্রদান করবে।
.toCharArray()
; এটি রেজেক্স এড়ায় এবং char
আদিম একটি অ্যারে প্রদান করে যাতে এটি দ্রুত এবং হালকা হয়। এটি 1-বর্ণের স্ট্রিংগুলির একটি অ্যারের প্রয়োজন অদ্ভুত ।
String str = "cat";
char[] cArray = str.toCharArray();
cArray
করবেন String
?
যদি বেসিক বহুভাষিক সমতলের অক্ষরগুলি ইনপুট (কিছু সিজেকে অক্ষর, নতুন ইমোজি ...) প্রত্যাশিত হয় "a💫b".split("(?!^)")
তবে ব্যবহার করা যায় না এমন পদ্ধতির ব্যবহার করা যায় না কারণ তারা এ জাতীয় অক্ষরগুলি ভেঙে ফেলে (ফলাফলগুলি array ["a", "?", "?", "b"]
) এবং আরও নিরাপদ কিছু ব্যবহার করতে হবে:
"a💫b".codePoints()
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(size -> new String[size]);
স্ট্রিংকে এক-চরিত্রের স্ট্রিংগুলির অ্যারে রূপান্তরিত করার একটি কার্যকর উপায় হ'ল:
String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
res[i] = Character.toString(str.charAt(i));
}
যাইহোক, এই ঘটনা এই যে কোনো একাউন্ট লাগবে না char
একটি String
আসলে একটি ইউনিকোড কোড দফা অর্ধেক প্রতিনিধিত্ব করতে পারে। (যদি কোড-পয়েন্ট বিএমপিতে না থাকে)) এটি মোকাবেলা করার জন্য আপনাকে কোড পয়েন্টগুলির মাধ্যমে পুনরাবৃত্তি করতে হবে ... যা আরও জটিল।
এই পদ্ধতির ব্যবহারের চেয়ে দ্রুত হবে String.split(/* clever regex*/)
এবং এটি সম্ভবত জাভা 8+ স্ট্রিম ব্যবহারের চেয়ে দ্রুত হবে। এটি এর থেকে দ্রুত সম্ভাব্য:
String[] res = new String[str.length()];
int 0 = 0;
for (char ch: str.toCharArray[]) {
res[i++] = Character.toString(ch);
}
কারণ toCharArray
রয়েছে কপি একটি নতুন অ্যারেতে অক্ষর।
সম্ভবত আপনি স্ট্রিং সামগ্রীর মধ্য দিয়ে যায় এমন একটি লুপ ব্যবহার করতে পারেন এবং charAt
পদ্ধতিটি ব্যবহার করে অক্ষর দ্বারা অক্ষর আহরণ করতে পারেন ।
একটি সাথে মিলিত ArrayList<String>
উদাহরণস্বরূপ, আপনার পৃথক অক্ষর আপনার অ্যারের পেতে পারেন।
যদি মূল স্ট্রিংটিতে পরিপূরক ইউনিকোড অক্ষর থাকে তবে split()
এটি কাজ করবে না, কারণ এটি এই অক্ষরগুলিকে সারোগেট জোড়ায় বিভক্ত করে। এই বিশেষ অক্ষরগুলি সঠিকভাবে পরিচালনা করতে, এর মতো একটি কোড কাজ করে:
String[] chars = new String[stringToSplit.codePointCount(0, stringToSplit.length())];
for (int i = 0, j = 0; i < stringToSplit.length(); j++) {
int cp = stringToSplit.codePointAt(i);
char c[] = Character.toChars(cp);
chars[j] = new String(c);
i += Character.charCount(cp);
}