JavaRush /جاوا بلاگ /Random-UR /آئیے StringUtils کلاس کو توڑتے ہیں۔

آئیے StringUtils کلاس کو توڑتے ہیں۔

گروپ میں شائع ہوا۔
سب کو سلام، میرے پیارے قارئین۔ میں اس کے بارے میں لکھنے کی کوشش کرتا ہوں کہ واقعی مجھے کیا دلچسپی ہے اور اس وقت مجھے کیا پریشانی ہے۔ لہذا، آج کچھ ہلکی پھلکی ریڈنگ ہوگی جو مستقبل میں ایک حوالہ کے طور پر آپ کے لیے کارآمد ہوگی: آئیے StringUtils کے بارے میں بات کرتے ہیں ۔ آئیے StringUtils کلاس - 1 کو توڑتے ہیں۔ایسا ہی ہوا کہ ایک وقت میں میں نے اپاچی کامنز لینگ 3 لائبریری کو نظرانداز کیا ۔ یہ ایک لائبریری ہے جس میں مختلف اشیاء کے ساتھ کام کرنے کے لیے معاون کلاسز ہیں۔ یہ تاروں، مجموعوں وغیرہ کے ساتھ کام کرنے کے لیے مفید طریقوں کا مجموعہ ہے۔ ایک موجودہ پروجیکٹ پر، جہاں مجھے 25 سال پرانی کاروباری منطق (COBOL سے Java تک) کا ترجمہ کرنے میں سٹرنگز کے ساتھ مزید تفصیل سے کام کرنا پڑا، یہ پتہ چلا کہ مجھے StringUtils کلاس کے بارے میں کافی گہرا علم نہیں ہے ۔ تو مجھے سب کچھ خود بنانا پڑا۔ میرا مطلب ہے؟ حقیقت یہ ہے کہ آپ کو سٹرنگ ہیرا پھیری سے متعلق کچھ کام خود لکھنے کی ضرورت نہیں ہے، لیکن ایک تیار حل استعمال کریں۔ خود لکھنے میں کیا حرج ہے؟ کم از کم اس میں یہ زیادہ کوڈ ہے جو کافی عرصہ پہلے لکھا جا چکا ہے۔ اضافی طور پر لکھے گئے کوڈ کی جانچ کا مسئلہ کوئی کم دباؤ نہیں ہے۔ جب ہم کسی ایسی لائبریری کا استعمال کرتے ہیں جس نے خود کو اچھا ثابت کیا ہو، تو ہم توقع کرتے ہیں کہ اس کا تجربہ ہو چکا ہے اور ہمیں اسے جانچنے کے لیے ٹیسٹ کیسز کا ایک گروپ لکھنے کی ضرورت نہیں ہے۔ ایسا ہوتا ہے کہ جاوا میں سٹرنگ کے ساتھ کام کرنے کے طریقوں کا سیٹ اتنا بڑا نہیں ہے۔ واقعی بہت سے طریقے نہیں ہیں جو کام کے لیے مفید ہوں گے۔ یہ کلاس NullPointerException کے لیے چیک فراہم کرنے کے لیے بھی بنائی گئی ہے۔ ہمارے مضمون کا خاکہ اس طرح ہو گا:
  1. کیسے جڑیں؟
  2. میرے کام کی مثالیں: اس طرح کی مفید کلاس کے بارے میں جانے بغیر، میں نے اپنی سائیکل کی بیساکھی کیسے بنائی۔
  3. آئیے دوسرے طریقوں کو دیکھتے ہیں جو مجھے دلچسپ لگے۔
  4. آئیے خلاصہ کرتے ہیں۔
تمام کیسز کو GitHub پر Javarush Community تنظیم میں ایک علیحدہ ذخیرہ میں شامل کیا جائے گا۔ ان کے لیے الگ الگ مثالیں اور ٹیسٹ ہوں گے۔

0. جڑنے کا طریقہ

جو لوگ میرے ساتھ ہاتھ ملا کر چلتے ہیں وہ پہلے سے ہی Git اور Maven دونوں سے کم و بیش واقف ہیں، اس لیے مزید میں اس علم پر بھروسہ کروں گا اور اپنے آپ کو نہیں دہراؤں گا۔ ان لوگوں کے لیے جنہوں نے میرے پچھلے مضامین کو یاد کیا یا ابھی پڑھنا شروع کیا، یہاں Maven اور Git کے بارے میں مواد ہیں ۔ بلاشبہ، تعمیراتی نظام کے بغیر (Maven، Gredl)، آپ ہر چیز کو دستی طور پر بھی جوڑ سکتے ہیں، لیکن آج کل یہ پاگل پن ہے اور آپ کو یقینی طور پر ایسا کرنے کی ضرورت نہیں ہے: بہتر ہے کہ فوری طور پر ہر چیز کو صحیح طریقے سے کرنے کا طریقہ سیکھ لیں۔ لہذا، Maven کے ساتھ کام کرنے کے لیے، ہم پہلے مناسب انحصار شامل کرتے ہیں:
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>${apache.common.version}</version>
</dependency>
جہاں ${apache.common.version} اس لائبریری کا ورژن ہے۔ اگلا، کچھ کلاس میں درآمد کرنے کے لیے، درآمد شامل کریں:
import org.apache.commons.lang3.StringUtils;
اور بس، یہ سب بیگ میں ہے))

1. ایک حقیقی پروجیکٹ کی مثالیں۔

  • بائیں پیڈ کا طریقہ

پہلی مثال عام طور پر اب اتنی احمقانہ معلوم ہوتی ہے کہ یہ بہت اچھی بات ہے کہ میرے ساتھی StringUtils.leftPad کے بارے میں جانتے تھے اور مجھے بتایا۔ کام کیا تھا: کوڈ کو اس طرح بنایا گیا تھا کہ ڈیٹا کو تبدیل کرنا ضروری تھا اگر یہ صحیح طریقے سے نہیں پہنچتا ہے۔ یہ توقع کی جاتی تھی کہ سٹرنگ فیلڈ صرف نمبرز پر مشتمل ہونا چاہیے، یعنی اگر اس کی لمبائی 3 ہے اور اس کی قیمت 1 ہے، تو اندراج "001" ہونا چاہئے۔ یعنی، سب سے پہلے آپ کو تمام خالی جگہوں کو ہٹانے کی ضرورت ہے، اور پھر اسے زیرو سے ڈھانپنا ہوگا۔ کام کے جوہر کو واضح کرنے کے لیے مزید مثالیں: "12" -> "012" سے "1" -> "001" وغیرہ۔ میں نے کیا کیا؟ LeftPadExample کلاس میں اس کی وضاحت کی ۔ میں نے ایک طریقہ لکھا ہے جو یہ سب کرے گا:
public static String ownLeftPad(String value) {
   String trimmedValue = value.trim();

   if(trimmedValue.length() == value.length()) {
       return value;
   }

   StringBuilder newValue = new StringBuilder(trimmedValue);

   IntStream.rangeClosed(1, value.length() - trimmedValue.length())
           .forEach(it -> newValue.insert(0, "0"));
   return newValue.toString();
}
ایک بنیاد کے طور پر، میں نے یہ خیال لیا کہ ہم صرف اصل اور تراشی ہوئی قدر کے درمیان فرق حاصل کر سکتے ہیں اور اسے سامنے والے صفر سے بھر سکتے ہیں۔ ایسا کرنے کے لئے میں نے انٹ اسٹریم کو ایک ہی آپریشن n بار کرنے کے لئے استعمال کیا۔ اور یہ یقینی طور پر جانچنے کی ضرورت ہے۔ اگر میں StringUtils.leftPad طریقہ کے بارے میں پہلے سے جانتا ہوتا تو میں کیا کرسکتا تھا :
public static String apacheCommonLeftPad(String value) {
   return StringUtils.leftPad(value.trim(), value.length(), "0");
}
جیسا کہ آپ دیکھ سکتے ہیں، بہت کم کوڈ ہے، اور ہر ایک کی طرف سے تصدیق شدہ لائبریری بھی استعمال ہوتی ہے۔ اس مقصد کے لیے، میں نے LeftPadExampleTest کلاس میں دو ٹیسٹ بنائے ہیں (عام طور پر جب وہ کسی کلاس کو ٹیسٹ کرنے کا ارادہ رکھتے ہیں، تو وہ اسی نام کے ساتھ ایک کلاس بناتے ہیں + اسی پیکیج میں ٹیسٹ، صرف src/test/java میں)۔ یہ ٹیسٹ ایک طریقہ چیک کرتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ یہ صحیح طریقے سے قدر کو تبدیل کرتا ہے، پھر دوسرا۔ بلاشبہ، بہت زیادہ ٹیسٹ لکھنے کی ضرورت ہوگی، لیکن ٹیسٹنگ ہمارے معاملے میں اہم موضوع نہیں ہے:
package com.github.javarushcommunity.stringutilsdemo;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

@DisplayName("Unit-level testing for LeftPadExample")
class LeftPadExampleTest {

   @DisplayName("Should transform by using ownLeftPad method as expected")
   @Test
   public void shouldTransformOwnLeftPadAsExpected() {
       //given
       String value = "1   ";
       String expectedTransformedValue = "0001";

       //when
       String transformedValue = LeftPadExample.ownLeftPad(value);

       //then
       Assertions.assertEquals(expectedTransformedValue, transformedValue);
   }

   @DisplayName("Should transform by using StringUtils method as expected")
   @Test
   public void shouldTransformStringUtilsLeftPadAsExpected() {
       //given
       String value = "1   ";
       String expectedTransformedValue = "0001";

       //when
       String transformedValue = LeftPadExample.apacheCommonLeftPad(value);

       //then
       Assertions.assertEquals(expectedTransformedValue, transformedValue);
   }

}
میں ابھی ٹیسٹوں کے بارے میں کچھ تبصرے کر سکتا ہوں۔ وہ JUnit 5 کا استعمال کرتے ہوئے لکھے گئے ہیں:
  1. ایک ٹیسٹ کو ٹیسٹ کے طور پر سمجھا جائے گا اگر اس میں مناسب تشریح ہے - @Test۔
  2. اگر نام میں ٹیسٹ کے عمل کو بیان کرنا مشکل ہو یا تفصیل لمبی اور پڑھنے میں تکلیف نہ ہو، تو آپ @DisplayName تشریح شامل کر سکتے ہیں اور اسے ایک عام تفصیل بنا سکتے ہیں جو ٹیسٹ چلانے کے دوران نظر آئے گی۔
  3. ٹیسٹ لکھتے وقت، میں BDD اپروچ استعمال کرتا ہوں، جس میں میں ٹیسٹ کو منطقی حصوں میں تقسیم کرتا ہوں:
    1. // دیا گیا - ٹیسٹ سے پہلے ڈیٹا سیٹ اپ بلاک؛
    2. // وہ بلاک کب ہے جہاں کوڈ کا وہ حصہ جس کی ہم جانچ کر رہے ہیں لانچ کیا جاتا ہے۔
    3. // پھر ایک بلاک ہے جس میں جب بلاک کے نتائج کی جانچ پڑتال کی جاتی ہے۔
اگر آپ انہیں چلاتے ہیں، تو وہ اس بات کی تصدیق کریں گے کہ سب کچھ توقع کے مطابق کام کر رہا ہے۔

  • stripStart طریقہ

یہاں مجھے ایک لائن کے ساتھ ایک مسئلہ حل کرنے کی ضرورت ہے جس میں شروع میں خالی جگہیں اور کوما ہوسکتے ہیں۔ تبدیلی کے بعد ان کا کوئی نیا مطلب نہیں ہونا چاہیے تھا۔ مسئلہ کا بیان پہلے سے کہیں زیادہ واضح ہے۔ چند مثالیں ہماری سمجھ کو تقویت دیں گی: “, , books” -> “books” “,,, books” -> “books” b , books” -> “b , books” جیسا کہ لیفٹ پیڈ کے معاملے میں ہے، میں نے StrimStartExample کلاس ، جس میں دو طریقے ہیں۔ ایک - اس کے اپنے حل کے ساتھ:
public static String ownStripStart(String value) {
   int index = 0;
   List commaSpace = asList(" ", ",");
   for (int i = 0; i < value.length(); i++) {
       if (commaSpace.contains(String.valueOf(value.charAt(i)))) {
           index++;
       } else {
           break;
       }
   }
   return value.substring(index);
}
یہاں خیال یہ تھا کہ اس انڈیکس کو تلاش کیا جائے جہاں سے مزید خالی جگہیں یا کوما نہیں ہیں۔ اگر وہ شروع میں بالکل نہیں تھے، تو انڈیکس صفر ہو جائے گا۔ اور دوسرا - StringUtils کے ذریعے حل کے ساتھ :
public static String apacheCommonLeftPad(String value) {
   return StringUtils.stripStart(value, StringUtils.SPACE + COMMA);
}
یہاں ہم پہلی دلیل کی معلومات پاس کرتے ہیں جس کے بارے میں ہم کس سٹرنگ کے ساتھ کام کر رہے ہیں، اور دوسرے میں ہم ایک سٹرنگ پاس کرتے ہیں جس میں حروف شامل ہیں جنہیں چھوڑنا ضروری ہے۔ ہم StripStartExampleTest کلاس اسی طرح بناتے ہیں :
package com.github.javarushcommunity.stringutilsdemo;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@DisplayName("Unit-level testing for StripStartExample")
class StripStartExampleTest {

   @DisplayName("Should transform by using stripStart method as expected")
   @Test
   public void shouldTransformOwnStripStartAsExpected() {
       //given
       String value = ", , books";
       String expectedTransformedValue = "books";

       //when
       String transformedValue = StripStartExample.ownStripStart(value);

       //then
       Assertions.assertEquals(expectedTransformedValue, transformedValue);
   }

   @DisplayName("Should transform by using StringUtils method as expected")
   @Test
   public void shouldTransformStringUtilsStripStartAsExpected() {
       //given
       String value = ", , books";
       String expectedTransformedValue = "books";

       //when
       String transformedValue = StripStartExample.apacheCommonLeftPad(value);

       //then
       Assertions.assertEquals(expectedTransformedValue, transformedValue);
   }
}

  • خالی طریقہ ہے

یقیناً یہ طریقہ بہت آسان ہے، لیکن یہ اسے کم مفید نہیں بناتا۔ یہ String.isEmpty() طریقہ کی صلاحیتوں کو بڑھاتا ہے ، جو null کے لیے ایک چیک بھی شامل کرتا ہے۔ کس لیے؟ NullPointerException سے بچنے کے لیے، یعنی کسی متغیر پر کال کرنے کے طریقوں سے بچنا جو null ہے ۔ لہذا، نہ لکھنے کے لئے:
if(value != null && value.isEmpty()) {
   //doing something
}
آپ آسانی سے یہ کر سکتے ہیں:
if(StringUtils.isEmpty(value)) {
   //doing something
}
اس طریقہ کار کا فائدہ یہ ہے کہ یہ فوری طور پر واضح ہوجاتا ہے کہ کون سا طریقہ استعمال کیا گیا ہے۔

2. StringUtils کلاس کے دیگر طریقوں کا تجزیہ

اب بات کرتے ہیں ان طریقوں کے بارے میں جو میری رائے میں بھی توجہ کے مستحق ہیں۔ عام طور پر StringUtils کے بارے میں بات کرتے ہوئے، یہ کہنا ضروری ہے کہ یہ سٹرنگ کلاس میں پائے جانے والے null محفوظ طریقے فراہم کرتا ہے (جیسا کہ isEmpty طریقہ کا معاملہ ہے )۔ آئیے ان کے ذریعے چلتے ہیں:

  • طریقہ کا موازنہ کریں

اس طرح کا طریقہ String میں موجود ہے اور NullPointerException پھینک دے گا اگر، دو تاروں کا موازنہ کرتے وقت، ان میں سے ایک null ہے۔ اپنے کوڈ میں بدصورت چیک سے بچنے کے لیے، ہم StringUtils.compare(String str1, String str2) طریقہ استعمال کر سکتے ہیں : یہ موازنہ کے نتیجے میں ایک int واپس کرتا ہے۔ ان اقدار کا کیا مطلب ہے؟ int = 0 اگر وہ ایک جیسے ہیں (یا دونوں کالعدم ہیں)۔ int <0، اگر str1 str2 سے کم ہے۔ int > 0، اگر str1 str2 سے بڑا ہے۔ اس کے علاوہ، اگر آپ ان کی دستاویزات کو دیکھیں تو، اس طریقہ کار کا Javadoc مندرجہ ذیل منظرنامے پیش کرتا ہے:
StringUtils.compare(null, null)   = 0
StringUtils.compare(null , "a")   < 0
StringUtils.compare("a", null)    > 0
StringUtils.compare("abc", "abc") = 0
StringUtils.compare("a", "b")     < 0
StringUtils.compare("b", "a")     > 0
StringUtils.compare("a", "B")     > 0
StringUtils.compare("ab", "abc")  < 0

  • پر مشتمل ہے... طریقے

یہاں یوٹیلیٹی ڈویلپرز نے ایک دھماکہ کیا۔ آپ جو بھی طریقہ چاہتے ہیں وہ موجود ہے۔ میں نے انہیں ایک ساتھ رکھنے کا فیصلہ کیا:
  1. contains ایک طریقہ ہے جو جانچتا ہے کہ آیا متوقع سٹرنگ کسی اور سٹرنگ کے اندر ہے۔ یہ کس طرح مفید ہے؟ آپ یہ طریقہ استعمال کر سکتے ہیں اگر آپ کو یہ یقینی بنانا ہو کہ متن میں کوئی خاص لفظ موجود ہے۔

    مثالیں:

    StringUtils.contains(null, *)     = false
    StringUtils.contains(*, null)     = false
    StringUtils.contains("", "")      = true
    StringUtils.contains("abc", "")   = true
    StringUtils.contains("abc", "a")  = true
    StringUtils.contains("abc", "z")  = false

    ایک بار پھر، NPE (Null Pointer Exception) سیکورٹی موجود ہے۔

  2. containsAny ایک ایسا طریقہ ہے جو چیک کرتا ہے کہ آیا سٹرنگ میں موجود کوئی حرف موجود ہے یا نہیں۔ اس کے علاوہ ایک مفید چیز: آپ کو اکثر ایسا کرنا پڑتا ہے۔

    دستاویزات سے مثالیں:

    StringUtils.containsAny(null, *)                  = false
    StringUtils.containsAny("", *)                    = false
    StringUtils.containsAny(*, null)                  = false
    StringUtils.containsAny(*, [])                    = false
    StringUtils.containsAny("zzabyycdxx", ['z', 'a']) = true
    StringUtils.containsAny("zzabyycdxx", ['b', 'y']) = true
    StringUtils.containsAny("zzabyycdxx", ['z', 'y']) = true
    StringUtils.containsAny("aba", ['z'])             = false

  3. containsIgnoreCase contains طریقہ کے لیے ایک مفید توسیع ہے ۔ درحقیقت، اس طریقہ کے بغیر اس طرح کے کیس کو چیک کرنے کے لیے، آپ کو کئی آپشنز سے گزرنا پڑے گا۔ اور اس طرح صرف ایک طریقہ ہم آہنگی سے استعمال کیا جائے گا۔

  4. دستاویزات سے چند مثالیں:

    StringUtils.containsIgnoreCase(null, *) = false
    StringUtils.containsIgnoreCase(*, null) = false
    StringUtils.containsIgnoreCase("", "") = true
    StringUtils.containsIgnoreCase("abc", "") = true
    StringUtils.containsIgnoreCase("abc", "a") = true
    StringUtils.containsIgnoreCase("abc", "z") = false
    StringUtils.containsIgnoreCase("abc", "A") = true
    StringUtils.containsIgnoreCase("abc", "Z") = false

  5. containsNone - نام سے اندازہ لگاتے ہوئے، آپ پہلے ہی سمجھ سکتے ہیں کہ کیا چیک کیا جا رہا ہے۔ اندر کوئی لکیریں نہیں ہونی چاہئیں۔ ایک مفید چیز، یقیناً۔ کچھ ناپسندیدہ کرداروں کی فوری تلاش؛)۔ اپنے ٹیلیگرام بوٹ میں ہم فحاشی کو فلٹر کریں گے اور ان مضحکہ خیز طریقوں کو نظر انداز نہیں کریں گے۔

    اور مثالیں، ہم ان کے بغیر کہاں ہوں گے:

    StringUtils.containsNone(null, *)       = true
    StringUtils.containsNone(*, null)       = true
    StringUtils.containsNone("", *)         = true
    StringUtils.containsNone("ab", '')      = true
    StringUtils.containsNone("abab", 'xyz') = true
    StringUtils.containsNone("ab1", 'xyz')  = true
    StringUtils.containsNone("abz", 'xyz')  = false

  • ڈیفالٹ اسٹرنگ کا طریقہ

طریقوں کا ایک سلسلہ جو اضافی معلومات شامل کرنے سے بچنے میں مدد کرتا ہے اگر سٹرنگ کالعدم ہے اور آپ کو کچھ ڈیفالٹ ویلیو سیٹ کرنے کی ضرورت ہے۔ ہر ذائقہ کے مطابق بہت سے اختیارات ہیں. ان میں سرفہرست ہے StringUtils.defaultString(final String str, final String defaultStr) - str null ہونے کی صورت میں، ہم آسانی سے ویلیو کو defaultStr میں منتقل کر دیں گے ۔ دستاویزات سے مثالیں:
StringUtils.defaultString(null, "NULL")  = "NULL"
StringUtils.defaultString("", "NULL")    = ""
StringUtils.defaultString("bat", "NULL") = "bat"
جب آپ ڈیٹا کے ساتھ POJO کلاس بناتے ہیں تو اسے استعمال کرنا بہت آسان ہوتا ہے۔

  • وائٹ اسپیس کو حذف کرنے کا طریقہ

یہ ایک دلچسپ طریقہ ہے، اگرچہ اس کے اطلاق کے لیے بہت سے اختیارات نہیں ہیں۔ اس کے ساتھ ساتھ اگر ایسا کوئی معاملہ سامنے آتا ہے تو یقیناً یہ طریقہ بہت مفید ہوگا۔ یہ تار سے تمام خالی جگہوں کو ہٹا دیتا ہے۔ جہاں کہیں بھی یہ خلا ہے، وہاں اس کا کوئی نشان نہیں ملے گا))) دستاویزات سے مثالیں:
StringUtils.deleteWhitespace(null)         = null
StringUtils.deleteWhitespace("")           = ""
StringUtils.deleteWhitespace("abc")        = "abc"
StringUtils.deleteWhitespace("   ab  c  ") = "abc"

  • طریقہ کے ساتھ ختم ہوتا ہے۔

خود ہی بولتا ہے۔ یہ ایک بہت مفید طریقہ ہے: یہ چیک کرتا ہے کہ آیا سٹرنگ تجویز کردہ سٹرنگ کے ساتھ ختم ہوتی ہے یا نہیں۔ یہ اکثر ضروری ہوتا ہے۔ بلاشبہ، آپ خود چیک لکھ سکتے ہیں، لیکن ایک ریڈی میڈ طریقہ استعمال کرنا واضح طور پر زیادہ آسان اور بہتر ہے۔ مثالیں:
StringUtils.endsWith(null, null)      = true
StringUtils.endsWith(null, "def")     = false
StringUtils.endsWith("abcdef", null)  = false
StringUtils.endsWith("abcdef", "def") = true
StringUtils.endsWith("ABCDEF", "def") = false
StringUtils.endsWith("ABCDEF", "cde") = false
StringUtils.endsWith("ABCDEF", "")    = true
جیسا کہ آپ دیکھ سکتے ہیں، سب کچھ خالی لائن کے ساتھ ختم ہوتا ہے))) میرے خیال میں یہ مثال (StringUtils.endsWith("ABCDEF", "") = true) صرف ایک بونس ہے، کیونکہ یہ مضحکہ خیز ہے) ایک طریقہ بھی ہے جو کیس کو نظر انداز کرتا ہے.

  • مساوی طریقہ

کالعدم محفوظ طریقہ کی ایک عمدہ مثال جو دو تاروں کا موازنہ کرتی ہے۔ ہم وہاں جو کچھ بھی ڈالیں گے، جواب وہیں ہوگا، اور یہ غلطیوں کے بغیر ہوگا۔ مثالیں:
StringUtils.equals(null, null)   = true
StringUtils.equals(null, "abc")  = false
StringUtils.equals("abc", null)  = false
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false
بلاشبہ، یہاں بھی ہے equalsIgnoreCase - سب کچھ بالکل اسی طرح کیا جاتا ہے، صرف ہم اس معاملے کو نظر انداز کرتے ہیں۔ چلو دیکھتے ہیں؟
StringUtils.equalsIgnoreCase(null, null)   = true
StringUtils.equalsIgnoreCase(null, "abc")  = false
StringUtils.equalsIgnoreCase("abc", null)  = false
StringUtils.equalsIgnoreCase("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true

  • کسی بھی طریقے کے برابر ہے۔

آئیے آگے بڑھیں اور مساوی طریقہ کو بڑھاتے ہیں ۔ آئیے کہتے ہیں کہ متعدد مساوات کی جانچ کے بجائے، ہم ایک کو انجام دینا چاہتے ہیں۔ اس کے لیے، ہم ایک سٹرنگ پاس کر سکتے ہیں جس کے ساتھ سٹرنگز کے سیٹ کا موازنہ کیا جائے گا؛ اگر ان میں سے کوئی بھی مجوزہ کے برابر ہے، تو یہ سچ ہوگا۔ ہم ایک سٹرنگ اور سٹرنگز کا ایک مجموعہ پاس کرتے ہیں تاکہ ان کا ایک دوسرے سے موازنہ کیا جا سکے (مجموعہ کے تاروں کے ساتھ پہلی سٹرنگ)۔ مشکل؟ یہ سمجھنے میں آپ کی مدد کرنے کے لیے دستاویزات کی مثالیں ہیں کہ کیا مطلب ہے:
StringUtils.equalsAny(null, (CharSequence[]) null) = false
StringUtils.equalsAny(null, null, null)    = true
StringUtils.equalsAny(null, "abc", "def")  = false
StringUtils.equalsAny("abc", null, "def")  = false
StringUtils.equalsAny("abc", "abc", "def") = true
StringUtils.equalsAny("abc", "ABC", "DEF") = false
یہاں بھی ہے equalsAnyIgnoreCase ۔ اور اس کی مثالیں:
StringUtils.equalsAnyIgnoreCase(null, (CharSequence[]) null) = false
StringUtils.equalsAnyIgnoreCase(null, null, null)    = true
StringUtils.equalsAnyIgnoreCase(null, "abc", "def")  = false
StringUtils.equalsAnyIgnoreCase("abc", null, "def")  = false
StringUtils.equalsAnyIgnoreCase("abc", "abc", "def") = true
StringUtils.equalsAnyIgnoreCase("abc", "ABC", "DEF") = true

نیچے کی لکیر

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