JavaRush /جاوا بلاگ /Random-UR /جاوا میں تقسیم کا طریقہ: ایک تار کو حصوں میں تقسیم کریں۔

جاوا میں تقسیم کا طریقہ: ایک تار کو حصوں میں تقسیم کریں۔

گروپ میں شائع ہوا۔
آئیے اسٹرنگ اسپلٹ طریقہ کے بارے میں بات کرتے ہیں : یہ کیا کرتا ہے اور اس کی ضرورت کیوں ہے۔ یہ اندازہ لگانا آسان ہے کہ یہ تار کو تقسیم کرتا ہے، لیکن عملی طور پر یہ کیسے کام کرتا ہے؟ آئیے اس پر گہری نظر ڈالتے ہیں کہ یہ طریقہ کیسے کام کرتا ہے اور کچھ غیر واضح تفصیلات پر تبادلہ خیال کرتے ہیں، اور ساتھ ہی یہ معلوم کرتے ہیں کہ اسٹرنگ کلاس میں اصل میں کتنے تقسیم کے طریقے ہیں۔ چلو!

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

لیڈنگ ڈیلیمیٹر

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

نتائج

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