JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ ورهائڻ جو طريقو: هڪ تار کي حصن ۾ ورهايو

جاوا ۾ ورهائڻ جو طريقو: هڪ تار کي حصن ۾ ورهايو

گروپ ۾ شايع ٿيل
اچو ته اسٽرنگ جي تقسيم جي طريقي جي باري ۾ ڳالهايون : اهو ڇا ڪري ٿو ۽ ڇو ان جي ضرورت آهي. اهو اندازو لڳائڻ آسان آهي ته اهو تار کي ورهائي ٿو، پر اهو عملي طور تي ڪيئن ڪم ڪندو آهي؟ اچو ته هڪ ويجھو نظر وجهون ته اهو طريقو ڪيئن ڪم ڪري ٿو ۽ ڪجهه غير واضح تفصيلن تي بحث ڪريون، ۽ ساڳئي وقت اهو معلوم ڪريون ته اصل ۾ اسٽرنگ ڪلاس ۾ ڪيترا ورهايل طريقا آهن. اچو ته هلون!

Java String.split لاءِ تعريف ۽ دستخط

جاوا ۾ تقسيم جو طريقو هڪ اسٽرنگ کي ذيلي اسٽرنگ ۾ ورهائي ٿو جيڪو ڊيليميٽر استعمال ڪندي بيان ڪيو ويو آهي باقاعده اظهار استعمال ڪندي. اچو ته طريقي جي دستخط ڏيو ۽ اسان جي ڊائيو شروع ڪريو:
String[] split(String regex)
دستخط مان ٻه شيون واضح آهن:
  1. طريقو تارن جي هڪ صف کي واپس ڏئي ٿو.
  2. طريقو هڪ ريجڪس اسٽرنگ کي پيٽرولر طور وٺندو آهي.
اچو ته مٿي ڏنل تعريف جي لحاظ کان هر هڪ شيء کي الڳ الڳ ڏسو.
  1. طريقو تارن جي هڪ صف کي واپس ڏئي ٿو.

    وصف ھيٺ ڏنل لفظن تي مشتمل آھي: " جاوا ۾ تقسيم جو طريقو ھڪڙو اسٽرنگ کي ذيلي اسٽرنگ ۾ ورهائي ٿو." اهي ذيلي اسٽرنگ گڏ ڪيا ويا آهن طريقي سان هڪ صف ۾ ۽ ان جي واپسي جي قيمت جي نمائندگي ڪن ٿا.

  2. طريقو هڪ ريجڪس اسٽرنگ کي پيٽرولر طور وٺندو آهي.

    ٻيهر، تعريف کي ياد ڪريو: "هڪ اسٽرنگ کي ذيلي اسٽرنگ ۾ ورهائي ٿو هڪ ڊيليميٽر استعمال ڪندي جيڪو باقاعده اظهار استعمال ڪندي بيان ڪيو ويو آهي." قبول ٿيل ريجڪس پيراميٽر هڪ باقاعده اظهار جو نمونو آهي جيڪو ماخذ اسٽرنگ تي لاڳو ٿئي ٿو ۽ ماخذ اسٽرنگ ۾ ڊيليميٽر ڪردار (يا اکرن جي ميلاپ) سان ملندو آهي.

جاوا ۾ ورهائڻ جو طريقو: هڪ تار کي حصن ۾ ورهايو - 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" }
"لال، نارنگي، پيلو" "،" { "لال" ، "نارنگي" ، "پيلو" }
"لال، نارنگي، پيلو" "،" { "لال" ، "نارنگي" ، "پيلو" }
مٿي ڏنل جدول ۾ آخري ٻن قطارن جي وچ ۾ فرق ڏسو. قلمي لڪير ۾، ڊيليميٽر هڪ ڪاما آهي، تنهنڪري لڪير کي اهڙي طرح ورهايو ويو آهي ته ڪجهه لفظن ۾ اڳوڻو اسپيس هجي. آخري لڪير ۾، اسان هڪ ڪاما ۽ هڪ اسپيس اکر کي ڊليميٽر طور استعمال ڪيو. تنهن ڪري، نتيجي واري صف ۾ اڳواٽ اسپيس سان ڪا به لائين شامل نه هئي. اھو صرف ھڪڙو ننڍڙو تفصيل آھي جيڪو ظاھر ڪري ٿو ته اھو ضروري آھي ته صحيح جدا ڪندڙ کي احتياط سان چونڊيو وڃي.

اڳواٽ حد بندي ڪندڙ

اتي هڪ وڌيڪ اهم nuance آهي. جيڪڏهن ماخذ اسٽرنگ ڊيليميٽر سان شروع ٿئي ٿي، نتيجي واري صف جو پهريون عنصر خالي اسٽرنگ هوندو. هڪ مثال ۾، اهو هن طرح نظر ايندو: Source string: "I love Java" Delimiter: " " نتيجي واري صف: { "" , "I" , "love" , "Java" } پر جيڪڏهن ماخذ اسٽرنگ ختم ٿئي ٿي ڊيليميٽر سان ۽ شروع نٿو ٿئي، نتيجو مختلف ٿيندو: Source string: "I love Java" Separator: " " Resulting array: { "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)
هن طريقي ۾ هڪ اضافي حد پيٽرولر آهي : اهو طئي ڪري ٿو ته ڪيترا ڀيرا ريجڪس نمونو ماخذ اسٽرنگ تي لاڳو ڪيو ويندو. هيٺيون وضاحتون آهن:

حد > 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) {
        // Notice the space at the end of the line
        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, ]

        Note that the last element of the array is
        an empty string, resulting from the space
        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) {
        // Notice the space at the end of the line
        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]
    }
}
جدا ڪندڙ نوٽ ڪريو: "\\|" . جيئن ته باقاعده اظهار ۾ "|" - هي هڪ خاص ڪردار آهي جنهن تي ڪجهه منطق جڙيل آهي؛ ان کي باقاعده طور استعمال ڪرڻ لاءِ (جنهن کي اسان سرچ اسٽرنگ ۾ ڳولڻ چاهيون ٿا)، اسان کي هن ڪردار کي ٻه پٺتي پيل استعمال ڪندي فرار ٿيڻو پوندو. اچو ته هڪ ٻيو مثال ڏسو. اچو ته چئو ته اسان وٽ هڪ آرڊر بابت معلومات آهي، جيڪا تقريبن هن شڪل ۾ لکيل آهي:
آئٽم_نمبر_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، ڪڪڙ، 20.05؛ 2، ٽماٽا، 123.45؛ 3، هاري، 0.50
اسان کي آرڊر جي مجموعي قيمت جي حساب سان ڪم ڪرڻ جي ضرورت آهي. هتي اسان کي ورهائڻ جو طريقو ڪيترائي ڀيرا استعمال ڪرڻو پوندو . پهريون قدم اهو آهي ته تار کي "؛" علامت ذريعي ان جي جزن جي حصن ۾ ورهايو وڃي. پوءِ اهڙي هر حصي ۾ اسان وٽ هڪ انفرادي پراڊڪٽ بابت معلومات هوندي، جنهن کي اسين مستقبل ۾ پروسيس ڪري سگهون ٿا. ۽ پوءِ، هر پراڊڪٽ جي اندر، اسان معلومات کي الڳ ڪنداسين "،" علامت استعمال ڪندي ۽ نتيجي ۾ نڪرندڙ صف مان هڪ عنصر هڪ مخصوص انڊيڪس سان (جنهن ۾ قيمت محفوظ ٿيل آهي) وٺي، ان کي عددي شڪل ۾ تبديل ڪيو ۽ آخري قيمت مرتب ڪيو. حڪم جي. اچو ته هڪ طريقو لکون جيڪو اهو سڀ حساب ڪندو:
public class Main {
    public static void main(String[] args) {
        String orderInfo = "1, cucumbers, 20.05; 2, tomatoes, 123.45; 3, hares, 0.50";
        System.out.println(getTotalOrderAmount(orderInfo));
        // Output: 144.0
    }

    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;
    }
}
پنهنجو پاڻ کي سمجهڻ جي ڪوشش ڪريو ته هي طريقو ڪيئن ڪم ڪري ٿو. انهن مثالن جي بنياد تي، اسان چئي سگهون ٿا ته تقسيم جو طريقو استعمال ڪيو ويندو آهي جڏهن اسان وٽ ڪجهه معلومات اسٽرنگ فارم ۾ آهي، جنهن مان اسان کي ڪجهه وڌيڪ مخصوص معلومات ڪڍڻ جي ضرورت آهي.

نتيجا

اسان اسٽرنگ ڪلاس جي تقسيم جو طريقو ڏٺو . اهو ضروري آهي ته هڪ خاص ڊيليميٽر استعمال ڪندي هڪ تار کي ان جي اجزاء حصن ۾ ورهايو وڃي. طريقو تارن جي هڪ صف کي واپس ڏئي ٿو (هڪ تار جا اجزاء). هڪ باقاعده اظهار کي قبول ڪري ٿو جيڪو ڳولهي delimiter ڪردار(s). اسان هن طريقي جي مختلف ذخيري کي ڏٺو:
  • اڳوڻو حد بندي ڪندڙ ڪردار؛
  • اوور لوڊ ٿيل ڀاءُ ٻن دليلن سان.
اسان ڪجھ "حقيقي زندگي" جي حالتن کي نقل ڪرڻ جي ڪوشش ڪئي آھي جنھن ۾ اسان ورهائڻ جو طريقو استعمال ڪيو آھي حل ڪرڻ لاءِ جيتوڻيڪ فرضي، پر ڪافي حقيقي مسئلا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION