CodeGym /جاوا بلاگ /Random-UR /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" }
"سرخ، نارنجی، پیلا" { "سرخ" ، "اورینج" ، "پیلا" }
"سرخ، نارنجی، پیلا" "،" { "سرخ" ، "نارنجی" ، "پیلا" }
اوپر دیے گئے جدول میں آخری دو قطاروں کے درمیان فرق دیکھیں۔ دوسری سے آخری قطار میں، کوما کو حد بندی کے طور پر استعمال کیا جاتا ہے۔ نتیجے کے طور پر، جب سٹرنگ تقسیم ہو جاتی ہے، تو کچھ الفاظ میں آگے کی جگہ ہوتی ہے۔ آخری قطار میں، ہم نے کوما اور ایک اسپیس کو اپنے حد بندی کے طور پر استعمال کیا۔ یہی وجہ ہے کہ نتیجے کی صف میں لیڈنگ اسپیس کے ساتھ کوئی ذیلی اسٹرنگ نہیں تھے۔ یہ صرف ایک لطیف تفصیل ہے جو یہ ظاہر کرتی ہے کہ صحیح حد بندی کا انتخاب احتیاط سے کرنا کتنا ضروری ہے۔

معروف حد بندی کرنے والا

یہ ایک اور اہم نکتہ ہے۔ اگر اصل سٹرنگ ڈیلیمیٹر سے شروع ہوتی ہے، تو نتیجے میں آنے والی صف کا پہلا عنصر ایک خالی سٹرنگ ہوگا۔ مثال کے طور پر، یہ اس طرح نظر آئے گا: اصل سٹرنگ: "میں جاوا سے محبت کرتا ہوں" ڈیلیمیٹر: " " نتیجہ خیز صف: { ""، "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 کلاس میں مندرجہ ذیل دستخط کے ساتھ ایک اور تقسیم کا طریقہ ہے :
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،آئٹم_نام_1،آئٹم_قیمت_1؛ آئٹم_نمبر_2،آئٹم_نام_2،آئٹم_قیمت_2؛...؛ آئٹم_نمبر_n، آئٹم_نام_n، آئٹم_قیمت_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;
    }
}
دیکھیں کہ کیا آپ یہ جان سکتے ہیں کہ یہ طریقہ خود کیسے کام کرتا ہے۔ ان مثالوں کی بنیاد پر، ہم کہہ سکتے ہیں کہ تقسیم کا طریقہ استعمال کیا جاتا ہے جب ہمارے پاس کچھ ڈیٹا سٹرنگ کے طور پر فارمیٹ کیا جاتا ہے، اور ہمیں اس سے کچھ مزید مخصوص معلومات نکالنے کی ضرورت ہوتی ہے۔

خلاصہ

ہم نے String کلاس کے تقسیم کے طریقہ کار کی جانچ کی۔ یہ صرف وہی ہے جس کی آپ کو ضرورت ہوتی ہے جب آپ کو ایک خصوصی حد بندی کی مدد سے اس کے اجزاء کے حصوں میں ایک تار کو تقسیم کرنا ہوتا ہے۔ یہ طریقہ تاروں کی ایک صف کو لوٹاتا ہے (وہ ذیلی تار جو اصل سٹرنگ پر مشتمل ہوتے ہیں)۔ یہ ایک ریگولر ایکسپریشن کو قبول کرتا ہے جس کے مماثلت حد بندی کرنے والے کردار (حرفوں) کی نمائندگی کرتے ہیں۔ ہم نے اس طریقہ کی مختلف باریکیوں کا جائزہ لیا:
  • ایک اہم حد بندی؛
  • دو پیرامیٹرز کے ساتھ اس کا اوورلوڈ بہن بھائی۔
ہم نے کچھ حقیقی زندگی کے حالات کا نمونہ بنانے کی بھی کوشش کی جہاں ہم نے فرضی، لیکن کافی حقیقت پسندانہ، مسائل کو حل کرنے کے لیے تقسیم کا طریقہ استعمال کیا۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION