CodeGym /جاوا بلاگ /Random-SD /Java String.split() طريقو
John Squirrels
سطح
San Francisco

Java String.split() طريقو

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

جاوا جي String.split لاءِ وضاحت ۽ دستخط

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

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

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

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

هي هڪ ٻيو اهم nuance آهي. جيڪڏهن اصل اسٽرنگ ڊيليميٽر سان شروع ٿئي ٿي، ته پوءِ نتيجي واري صف جو پهريون عنصر هڪ خالي اسٽرنگ هوندو. مثال طور، اهو هن طرح نظر ايندو: اصل اسٽرنگ: "مون کي جاوا پيار آهي" ڊيليميٽر: " " نتيجو واري صف: { ""، "I"، "love"، "Java" } پر جيڪڏهن اصل اسٽرنگ ختم ٿئي ٿي ڊيليميٽر سان ھڪڙي سان شروع ڪرڻ کان، پوء نتيجو مختلف ھوندو: اصل اسٽرنگ: "مون کي جاوا پسند آھي" Delimiter: " " نتيجي واري صف: { "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) {
        // 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]
    }
}
ڊيليميٽر کي نوٽ ڪريو: "\\|" . باقاعده اظهار ۾، "|" هڪ خاص ڪردار آهي خاص معنيٰ سان، پوءِ جيڪڏهن اسان ان کي استعمال ڪرڻ چاهيون ٿا هڪ عام ڪردار (يعني جيڪو اسان اصل اسٽرنگ ۾ ڳولڻ چاهيون ٿا) ته پوءِ اسان کي ان ڪردار کي ٻن پٺاڻن سان فرار ٿيڻو پوندو. هڪ ٻئي مثال تي غور ڪريو. اچو ته اسان وٽ آرڊر جي معلومات آهي جيڪا هن طرح ترتيب ڏنل آهي:
آئٽم_نمبر_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