ডিলিমিটার হিসাবে কোনও সাদা স্পেস অক্ষরের সাথে একটি স্ট্রিং কীভাবে বিভক্ত করা যায়


555

কি Regex প্যাটার্ন পাস আমার লাগতো java.lang.String.split() সব হোয়াইটস্পেস অক্ষর (ব্যবহার, সাবস্ট্রিং একটি অ্যারের মধ্যে একটি স্ট্রিং বিভক্ত করতে ' ', '\t', '\n'বিভেদক রূপে, ইত্যাদি)?

উত্তর:


955

এর লাইনে কিছু

myString.split("\\s+");

এই সীমানা হিসাবে সমস্ত সাদা স্পেস ভাগ করে দেয়।

সুতরাং আমার যদি স্ট্রিং থাকে:

"Hello[space][tab]World"

এটি স্ট্রিং প্রদান করবে "Hello"এবং "World"এবং এর মধ্যে ফাঁকা স্থান বাদ [space]দেবে [tab]

ভনসি যেভাবে উল্লেখ করেছে, ব্যাকস্ল্যাশটি এড়াতে হবে, কারণ জাভা প্রথমে একটি বিশেষ চরিত্রে স্ট্রিংটি থেকে পালানোর চেষ্টা করবে এবং এটি পার্স করার জন্য প্রেরণ করবে । আপনি যা চান, এটি আক্ষরিক "\s", যার অর্থ, আপনাকে পাস করা দরকার "\\s"। এটি কিছুটা বিভ্রান্তি পেতে পারে।

\\sসমতূল্য [ \\t\\n\\x0B\\f\\r]


1
এই অনুস্মারকটির জন্য আপনাকে ধন্যবাদ। আমি হিপ থেকে কেবল কোডিং করছিলাম :)
হেনরিক পল

34
মনে রাখবেন যে আপনাকে trim()প্রথমে প্রয়োজন : trim().split("\\s++")- অন্যথায় উদাহরণস্বরূপ split abc` বিভক্তকরণ প্রথমে দুটি খালি স্ট্রিং নির্গত করবে।
মার্কাস জুনিয়াস ব্রুটাস

আপনি নিজের উত্তরের শেষের দিকে কেন চারটি ব্যাকস্ল্যাশ ব্যবহার করলেন? অর্থাত। "\\\\s"?
মাইকেল বোরকোভস্কি

"" .Trim ()। split ("+ s +") - খালি স্ট্রিং স্প্লিট আপনাকে দৈর্ঘ্য ১। "" শব্দ ".ট্রিম ()। বিভক্ত (" \\ s + ") দেয় - আপনাকে 1 দৈর্ঘ্যও দেয় ।
পলশেল

88

বেশিরভাগ রেজেক্স উপভাষায় এই ধরণের জিনিসটির জন্য আপনি ব্যবহার করতে পারেন সুবিধাজনক চরিত্রের সংক্ষিপ্তসারগুলির একটি সেট রয়েছে - এগুলি মনে রাখা ভাল:

\w - যে কোনও শব্দের চরিত্রের সাথে মেলে।

\W - কোনও নন-ওয়ার্ডের চরিত্রের সাথে মেলে।

\s - কোনও সাদা-স্থানের চরিত্রের সাথে মেলে।

\S - সাদা-স্পেস অক্ষর ছাড়া কিছু মিলছে।

\d - কোনও অঙ্কের সাথে মেলে।

\D - অঙ্ক বাদে অন্য কিছু মেলে।

"রেজেক্স চিটশিটস" অনুসন্ধানের জন্য আপনাকে দরকারী প্রচুর সংক্ষিপ্তসার দিয়ে পুরস্কৃত করা উচিত।



প্যাটার্ন ক্লাস জাভাডোক
ক্রিস্টোফ রাউসি

64

জাভাস্ক্রিপ্টে এই কাজ পেতে , আমাকে নিম্নলিখিতগুলি করতে হয়েছিল:

myString.split(/\s+/g)

15
এটি জাভাস্ক্রিপ্টে রয়েছে। আমিও মনোযোগ
দিচ্ছিলাম

14
উফ। আমার ভুল. জাভাস্ক্রিপ্টের উত্তর খুঁজতে গিয়ে এই উত্তরটি এখনও অন্য কয়েকজনকে সাহায্য করবে যারা এই থ্রেডটিতে হোঁচট খায়। :-)
মাইক মানার্ড

হাহা আমি জাভাস্ক্রিপ্টের জন্য একটি উত্তর খুঁজছিলাম, দুর্ঘটনাক্রমে এই প্রশ্নটি এসেছিল এবং তারপরে আমি চলে যাওয়ার আগে আপনার উত্তরটি লক্ষ্য করলাম। +1 টি।
ক্রিস

দারুণ! এই উত্তরটি কারও পক্ষে কার্যকর প্রমাণ পেয়ে আমি আনন্দিত, এমনকি যদি এটি ভুল প্রশ্নের উত্তর দেয় তবেও। :-)
মাইক ম্যানার্ড

এটি সার্ভার আরগগুলি বিভক্ত করার জন্য আমারও অনেক সহায়তা করেছিল :)
প্রোগ্রামারপ্লে

36

"\\ s +" এর কৌশলটি করা উচিত


1
কেন + শেষে?
ফ্ল্লোলা 22'16

4
@ আনারেলে এটি অন্তত একবার স্পেস ক্যারেক্টার ক্যাপচার পুনরাবৃত্তি করে এবং যতবার সম্ভব সম্ভব: https://regex101.com/r/dT7wG9/1 বা http://rick.measham.id.au/paste/explain দেখুন। pl? regex =% s% 2B বা http://regexper.com/#^s%2B বা http://www.myezapp.com/apps/dev/regexp/show.ws?regex=\s+&env= env_java
ভোনসি

11

এছাড়াও আপনার একটি ইউনিকোড নন-ব্রেকিং স্পেস xA0 থাকতে পারে ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

এটি আমাকে সাহায্য করে!
সুরসিন তানচরোইন


8

অ্যাপাচি কমন্স ল্যাংয়ের শ্বেতক্ষেত্রের অক্ষরগুলি সীমানার হিসাবে বিভক্ত করার একটি পদ্ধতি রয়েছে:

StringUtils.split("abc def")

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

এটি একটি রেজেক্স প্যাটার্নের চেয়ে ব্যবহার করা সহজ।


2

যেহেতু এটি একটি নিয়মিত বহিঃপ্রকাশ এবং আমি ধরে নিচ্ছি যে আপনি কমা, বিন্দু ইত্যাদির মতো অ-অক্ষর অক্ষরও চাইবেন না (যেমন "এক, দুই" উচিত [একটি] [দুই]), এটা করা উচিত:

myString.split(/[\s\W]+/)

1

আপনি নিম্নলিখিত বিবৃতি ব্যবহার করে লাইন ব্রেক দ্বারা একটি স্ট্রিং বিভক্ত করতে পারেন:

 String textStr[] = yourString.split("\\r?\\n");

আপনি নীচের বিবৃতিটি ব্যবহার করে হোয়াইটস্পেস দ্বারা একটি স্ট্রিং বিভক্ত করতে পারেন:

String textStr[] = yourString.split("\\s+");


-1

এই কোডটি অধ্যয়ন করুন .. শুভকামনা

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}

আপনি দয়া করে আপনার উত্তর বিস্তারিত বলতে পারেন?
স্টিফান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.