CodeGym /Java Blog /এলোমেলো /Java String.split() পদ্ধতি
John Squirrels
লেভেল 41
San Francisco

Java String.split() পদ্ধতি

এলোমেলো দলে প্রকাশিত
জাভা এর String.split পদ্ধতি সম্পর্কে কথা বলা যাক : এটি কি করে এবং কেন এটি প্রয়োজন। এটা অনুমান করা কঠিন নয় যে এটি একটি জাভা স্ট্রিংকে বিভক্ত করে, কিন্তু কীভাবে এটি অনুশীলনে কাজ করে? আসুন পদ্ধতিটির ক্রিয়াকলাপের গভীরে ডুব দেওয়া যাক এবং কিছু অ-স্পষ্ট বিবরণ নিয়ে আলোচনা করা যাক। একই সময়ে, আমরা শিখব যে স্ট্রিং এর আসলে কতগুলি বিভক্ত পদ্ধতি রয়েছে। চলো যাই!

Java এর String.split এর জন্য বর্ণনা এবং স্বাক্ষর

জাভাতে, বিভক্ত পদ্ধতি একটি রেগুলার এক্সপ্রেশন ব্যবহার করে সংজ্ঞায়িত একটি ডিলিমিটার ব্যবহার করে একটি স্ট্রিংকে সাবস্ট্রিংয়ে বিভক্ত করে। আসুন পদ্ধতি স্বাক্ষর উপস্থাপন করুন এবং আমাদের ডাইভ শুরু করুন:

String[] split(String regex)
স্বাক্ষর থেকে দুটি জিনিস পরিষ্কার:
  1. পদ্ধতিটি স্ট্রিংগুলির একটি অ্যারে প্রদান করে।
  2. পদ্ধতিটির একটি স্ট্রিং ইনপুট প্যারামিটার রয়েছে যাকে regex বলা হয় ।
আসুন আমরা উপরে প্রদত্ত বর্ণনাটি ভাঙ্গিয়ে এগুলির প্রতিটিকে আলাদাভাবে বিশ্লেষণ করি।
  1. পদ্ধতিটি স্ট্রিংগুলির একটি অ্যারে প্রদান করে।

    ঘোষণায় নিম্নলিখিত শব্দগুলি রয়েছে: "জাভাতে, বিভক্ত পদ্ধতি একটি স্ট্রিংকে সাবস্ট্রিংগুলিতে বিভক্ত করে।" পদ্ধতিটি এই সাবস্ট্রিংগুলিকে একটি অ্যারেতে সংগ্রহ করে যা রিটার্ন মান হয়ে যায়।

  2. পদ্ধতিটির একটি স্ট্রিং ইনপুট প্যারামিটার রয়েছে যাকে regex বলা হয় ।

    আবার, বর্ণনাটি স্মরণ করুন: "রেগুলার এক্সপ্রেশন ব্যবহার করে সংজ্ঞায়িত একটি ডিলিমিটার ব্যবহার করে একটি স্ট্রিংকে সাবস্ট্রিংয়ে বিভক্ত করে।" regex ইনপুট প্যারামিটার হল একটি রেগুলার এক্সপ্রেশন যা মূল স্ট্রিং এ প্রয়োগ করা হয় যখন অক্ষর বা অক্ষরের সংমিশ্রণ মিলে যায়, তখন সেগুলিকে একটি বিভেদক হিসাবে গণ্য করা হয়।

জাভাতে String.split() পদ্ধতি: একটি স্ট্রিংকে অংশে বিভক্ত করা - 1

জাভা অনুশীলনে বিভক্ত

এখন বিন্দু কাছাকাছি আসা যাক. কল্পনা করা যাক আমরা শব্দ একটি স্ট্রিং আছে. উদাহরণস্বরূপ, এই মত:
আমি জাভা ভালোবাসি
আমরা শব্দের মধ্যে স্ট্রিং বিভক্ত করা প্রয়োজন. আমরা দেখতে পাচ্ছি যে এই স্ট্রিং-এর শব্দগুলো স্পেস দিয়ে একে অপরের থেকে আলাদা করা হয়েছে। এই ক্ষেত্রে, একটি স্পেস ক্যারেক্টার হল আমাদের ডিলিমিটারের জন্য উপযুক্ত প্রার্থী। আমাদের টাস্ক সমাধানের জন্য কোড এই মত দেখাবে:

public class Main {
    public static void main(String[] args) {
        String str = "I love Java";
        String[] words = str.split(" ");
        for (String word : words) {
            System.out.println(word);
        }
    }
}
প্রধান পদ্ধতির আউটপুট নিম্নলিখিত লাইন হবে:
আমি জাভা ভালোবাসি
আসুন বিভক্ত পদ্ধতিটি কীভাবে কাজ করবে তার আরও কয়েকটি উদাহরণ দেখি:
স্ট্রিং ডিলিমিটার পদ্ধতির ফলাফল
"আমি জাভা ভালোবাসি" " " (স্পেস অক্ষর) { "আমি" , "প্রেম" , "জাভা" }
"192.168.0.1:8080" ":" { "192.168.0.1" , "8080" }
"লাল, কমলা, হলুদ" "," { "লাল" , "কমলা" , "হলুদ" }
"লাল, কমলা, হলুদ" ", " { "লাল" , "কমলা" , "হলুদ" }
উপরের টেবিলের শেষ দুটি সারির মধ্যে পার্থক্য লক্ষ্য করুন। দ্বিতীয় থেকে শেষ সারিতে, একটি কমা ডিলিমিটার হিসাবে ব্যবহৃত হয়। ফলস্বরূপ, যখন স্ট্রিংটি বিভক্ত হয়, তখন কিছু শব্দের অগ্রণী স্থান থাকে। শেষ সারিতে, আমরা একটি কমা এবং একটি স্থান ব্যবহার করেছি আমাদের বিভাজনকারী হিসাবে। এই কারণেই ফলাফলের অ্যারেতে লিডিং স্পেস সহ কোনও সাবস্ট্রিং ছিল না। এটি শুধুমাত্র একটি সূক্ষ্ম বিশদ যা প্রদর্শন করে যে সঠিক ডিলিমিটারটি সাবধানে নির্বাচন করা কতটা গুরুত্বপূর্ণ।

অগ্রণী বিভাজনকারী

এটি আরেকটি গুরুত্বপূর্ণ সূক্ষ্মতা। যদি মূল স্ট্রিংটি ডিলিমিটার দিয়ে শুরু হয়, তাহলে ফলস্বরূপ অ্যারের প্রথম উপাদানটি একটি খালি স্ট্রিং হবে। উদাহরণস্বরূপ, এটি এইরকম দেখাবে: আসল স্ট্রিং: " আমি জাভা ভালোবাসি" ডেলিমিটার: " " ফলাফলের অ্যারে: { "", "I", "love", "Java" } কিন্তু যদি আসল স্ট্রিংটি একটি বিভেদক দিয়ে শেষ হয় একটি দিয়ে শুরু করার চেয়ে, তাহলে ফলাফলটি ভিন্ন হবে: আসল স্ট্রিং: "আমি জাভা ভালোবাসি " ডেলিমিটার: " " ফলাফলের অ্যারে: { "I", "love", "Java"

public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" "));
        print(" I love Java".split(" "));
        print("I love Java ".split(" "));
        print(" I love Java ".split(" "));
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
প্রধান পদ্ধতির আউটপুট এই মত হবে :
[আমি, ভালোবাসি, জাভা] [, আমি, ভালোবাসি, জাভা] [আমি, ভালোবাসি, জাভা] [, আমি, ভালোবাসি, জাভা]
আবার আপনার দৃষ্টি আকর্ষণ করুন যে যখন মূল স্ট্রিংয়ের প্রথম অক্ষরটি একটি বিভাজক অক্ষর হয়, তখন ফলাফলটি হয় যে অ্যারের প্রথম উপাদানটি একটি খালি স্ট্রিং হবে।

ওভারলোড ভাইবোন

স্ট্রিং ক্লাসে নিম্নলিখিত স্বাক্ষর সহ আরেকটি বিভক্ত পদ্ধতি রয়েছে :

String[] split(String regex, int limit)
এই পদ্ধতির একটি অতিরিক্ত সীমা পরামিতি রয়েছে: এটি নির্ধারণ করে কতবার regex প্যাটার্নটি আসল স্ট্রিংটিতে প্রয়োগ করা হবে। নীচের ব্যাখ্যা দেখুন:

সীমা > 0

প্যাটার্ন সীমা প্রয়োগ করা হয় -1 বার. আরও কি, প্রত্যাবর্তিত অ্যারের দৈর্ঘ্য সীমা প্যারামিটারের মান অতিক্রম করবে না। অ্যারের শেষ উপাদানটি স্ট্রিংয়ের অংশ হবে যা শেষ স্থানটি অনুসরণ করে যেখানে বিভাজন পাওয়া গেছে। উদাহরণ:

public class Main {
    public static void main(String[] args) {
        print("I love Java".split(" ", 1));
        print("I love Java".split(" ", 2));
        /*
         Output: 
         [I love Java]
         [I, love Java]
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

সীমা <0

ডিলিমিটার রেগুলার এক্সপ্রেশন স্ট্রিং এ যতবার সম্ভব প্রয়োগ করা হয়। ফলস্বরূপ অ্যারের যেকোনো দৈর্ঘ্য থাকতে পারে। উদাহরণ:

public class Main {
    public static void main(String[] args) {
        // Note the space at the end of the string
        print("I love Java ".split(" ", -1));
        print("I love Java ".split(" ", -2));
        print("I love Java ".split(" ", -12));
        /*
         Output:
        [I, love, Java, ]
        [I, love, Java, ]
        [I, love, Java, ]
        
        Please note that the last element of the array is
        an empty string. This is caused by the whitespace
        at the end of the original string. 
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}

সীমা = 0

ক্ষেত্রে যেমন সীমা <0, ডিলিমিটার প্যাটার্ন যতবার সম্ভব স্ট্রিংটিতে প্রয়োগ করা হয়। চূড়ান্ত অ্যারের যেকোনো দৈর্ঘ্য থাকতে পারে। যদি শেষ উপাদান খালি স্ট্রিং হয়, তারা চূড়ান্ত অ্যারে থেকে বাতিল করা হয়. উদাহরণ:

public class Main {
    public static void main(String[] args) {
        // Note the space at the end of the string
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        print("I love Java ".split(" ", 0));
        /*
         Output:
        [I, love, Java]
        [I, love, Java]
        [I, love, Java]
        Note the absence of empty strings at the end of the arrays
        */
    }

    static void print(String[] arr) {
        System.out.println(Arrays.toString(arr));
    }
}
যদি আমরা বিভক্ত পদ্ধতির এক-প্যারামিটার সংস্করণের বাস্তবায়নে উঁকি দিই , তাহলে আমরা দেখতে পাব যে এটি তার ওভারলোডেড ভাইবোনের মতো, কিন্তু দ্বিতীয় যুক্তিটি শূন্যে সেট করা হয়েছে:

    public String[] split(String regex) {
        return split(regex, 0);
    }

বিভিন্ন উদাহরণ

বাস্তব-বিশ্বের অনুশীলনে, এটি কখনও কখনও ঘটে যে আমাদের কিছু নির্দিষ্ট নিয়ম অনুসারে স্ট্রিং তৈরি করা হয়। এই ধরনের একটি স্ট্রিং যে কোনো জায়গা থেকে আমাদের প্রোগ্রামে আসতে পারে:
  • একটি তৃতীয় পক্ষের পরিষেবা থেকে;
  • আমাদের সার্ভারে পাঠানো একটি অনুরোধ থেকে;
  • একটি কনফিগারেশন ফাইল থেকে;
  • এবং তাই
এই পরিস্থিতিতে, প্রোগ্রামার সাধারণত "খেলার নিয়ম" জানেন। ধরা যাক একজন প্রোগ্রামার জানেন যে তিনি এই প্যাটার্ন অনুসারে সংরক্ষিত ব্যবহারকারীর তথ্য নিয়ে কাজ করছেন:
user_id|user_login|user_email
উদাহরণ হিসাবে কিছু নির্দিষ্ট মান নেওয়া যাক:
135|bender|bender@gmail.com
ধরুন প্রোগ্রামারের কাজ হল এমন একটি পদ্ধতি লেখা যা ব্যবহারকারীকে একটি ইমেল পাঠায়। প্রোগ্রামার ব্যবহারকারীর ডেটা অ্যাক্সেস করতে পারে, যা উপরে দেওয়া বিন্যাসে রেকর্ড করা হয়। আমরা এখন যে সাবটাস্কটি বিশ্লেষণ করতে থাকব তা হল ব্যবহারকারীর বাকি ডেটা থেকে ইমেল ঠিকানাটিকে কীভাবে আলাদা করা যায়। এটি এমন একটি উদাহরণ যেখানে বিভক্ত পদ্ধতিটি কার্যকর হতে পারে। সর্বোপরি, যদি আমরা ব্যবহারকারীর ডেটা টেমপ্লেটটি দেখি, আমরা বুঝতে পারি যে বাকিগুলি থেকে ব্যবহারকারীর ইমেল ঠিকানা বের করা স্ট্রিংকে বিভক্ত করার জন্য বিভক্ত পদ্ধতিতে কল করার মতো একটি সহজ। তারপর ইমেল ঠিকানাটি ফলাফল অ্যারের শেষ উপাদানে থাকবে। এখানে একটি পদ্ধতির একটি উদাহরণ যা ব্যবহারকারীর ডেটা সম্বলিত একটি স্ট্রিং নেয় এবং ব্যবহারকারীর ইমেল ঠিকানা ফেরত দেয়। সরলতার জন্য, আসুন আমরা বলি যে ডেটা স্ট্রিং সর্বদা আমরা যে বিন্যাসে চাই তা থাকে:

public class Main {
    public static void main(String[] args) {
        String userInfo = "135|bender|bender@gmail.com";
        System.out.println(getUserEmail(userInfo));
        // Output: bender@gmail.com
    }

    static String getUserEmail(String userInfo) {
        String[] data = userInfo.split("\\|");
        return data[2]; // or data[data.length - 1]
    }
}
বিভেদক লক্ষ্য করুন: "\\|" . রেগুলার এক্সপ্রেশনে, "|" বিশেষ অর্থ সহ একটি বিশেষ অক্ষর, তাই যদি আমরা এটিকে একটি সাধারণ অক্ষর ব্যবহার করতে চাই (অর্থাৎ আমরা মূল স্ট্রিংটিতে যা খুঁজতে চাই), তাহলে আমাদের দুটি ব্যাকস্ল্যাশ দিয়ে অক্ষরটিকে এড়িয়ে যেতে হবে। আরেকটি উদাহরণ বিবেচনা করুন। ধরা যাক আমাদের কাছে অর্ডারের তথ্য আছে যা এইরকম কাঠামোবদ্ধ:
item_number_1,item_name_1,item_price_1;item_number_2,item_name_2,item_price_2;...;item_number_n,item_name_n,item_price_n
অথবা আমরা কিছু নির্দিষ্ট মান গ্রহণ করতে পারি:
1,শসা,2.39;2,টমেটো,1.89;3,বেকন,4.99
আমাদের কাজ হল অর্ডারের মোট খরচ গণনা করা। এখানে আমাদেরকে কয়েকবার বিভক্ত পদ্ধতি প্রয়োগ করতে হবে । প্রথম ধাপ হল ";" ব্যবহার করে স্ট্রিং বিভক্ত করা এটিকে এর উপাদান অংশে বিভক্ত করার জন্য বিভাজনকারী হিসাবে। তারপর প্রতিটি ফলস্বরূপ সাবস্ট্রিং একটি পৃথক পণ্য সম্পর্কে তথ্য ধারণ করবে, যা আমরা পরে প্রক্রিয়া করতে পারি। তারপর, প্রতিটি পণ্যের জন্য, আমরা "," চিহ্ন ব্যবহার করে সংশ্লিষ্ট তথ্যগুলিকে বিভক্ত করব। আমরা ফলস্বরূপ স্ট্রিং অ্যারে থেকে একটি নির্দিষ্ট সূচক (যেখানে পণ্যের মূল্য সংরক্ষিত আছে) সহ একটি উপাদান নেব, এটিকে সংখ্যাসূচক আকারে রূপান্তর করব এবং অর্ডারের মোট খরচের সাথে মিল করব। আসুন একটি পদ্ধতি লিখি যা এই সমস্ত গণনা করবে:

public class Main {
    public static void main(String[] args) {
        String orderInfo = "1,cucumbers,2.39;2,tomatoes,1.89;3,bacon,4.99";
        System.out.println(getTotalOrderAmount(orderInfo));
        // Output: 9.27
    }

    static double getTotalOrderAmount(String orderInfo) {
        double totalAmount = 0d;
        final String[] items = orderInfo.split(";");

        for (String item : items) {
            final String[] itemInfo = item.split(",");
            totalAmount += Double.parseDouble(itemInfo[2]);
        }

        return totalAmount;
    }
}
এই পদ্ধতিটি আপনার নিজের উপর কীভাবে কাজ করে তা আপনি বুঝতে পারেন কিনা দেখুন। এই উদাহরণগুলির উপর ভিত্তি করে, আমরা বলতে পারি যে বিভক্ত পদ্ধতিটি ব্যবহার করা হয় যখন আমাদের কিছু ডেটা স্ট্রিং হিসাবে ফর্ম্যাট করা থাকে এবং আমাদের এটি থেকে আরও নির্দিষ্ট কিছু তথ্য বের করতে হবে।

সারসংক্ষেপ

আমরা স্ট্রিং ক্লাসের বিভক্ত পদ্ধতি পরীক্ষা করেছি । একটি বিশেষ ডিলিমিটারের সাহায্যে একটি স্ট্রিংকে এর উপাদান অংশে বিভক্ত করতে হলে এটি আপনার প্রয়োজন। পদ্ধতিটি স্ট্রিংগুলির একটি অ্যারে প্রদান করে (মূল স্ট্রিং গঠিত সাবস্ট্রিংগুলি)। এটি একটি রেগুলার এক্সপ্রেশন গ্রহণ করে যার মিলগুলি ডিলিমিটার অক্ষর(গুলি) উপস্থাপন করে। আমরা এই পদ্ধতির বিভিন্ন সূক্ষ্মতা পরীক্ষা করেছি:
  • একটি অগ্রণী বিভাজনকারী;
  • দুটি পরামিতি সহ এর ওভারলোডেড ভাইবোন।
আমরা কিছু বাস্তব জীবনের পরিস্থিতি মডেল করার চেষ্টা করেছি যেখানে আমরা অনুমানমূলক, কিন্তু বেশ বাস্তবসম্মত, সমস্যাগুলি সমাধান করতে বিভক্ত পদ্ধতি ব্যবহার করেছি।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION