JavaRush /จาวาบล็อก /Random-TH /มาแยกคลาส StringUtils กัน
Roman Beekeeper
ระดับ

มาแยกคลาส StringUtils กัน

เผยแพร่ในกลุ่ม
สวัสดีทุกคนผู้อ่านที่รักของฉัน ฉันพยายามเขียนเกี่ยวกับสิ่งที่ฉันสนใจจริงๆ และสิ่งที่ฉันกังวลในขณะนี้ ดังนั้นวันนี้จะมีการอ่านแบบเบา ๆ ที่จะเป็นประโยชน์สำหรับคุณเป็นข้อมูลอ้างอิงในอนาคต: มาพูดถึงStringUtilsกัน ดีกว่า มาแยกคลาส StringUtils - 1 กันมันเกิดขึ้นเมื่อครั้งหนึ่งฉันข้าม ไลบรารี Apache Commons Lang 3 นี่คือไลบรารีที่มีคลาสเสริมสำหรับการทำงานกับอ็อบเจ็กต์ต่างๆ นี่คือคอลเลกชันของวิธีการที่เป็นประโยชน์สำหรับการทำงานกับสตริง คอลเลกชัน และอื่นๆ ในโครงการปัจจุบัน ซึ่งฉันต้องทำงานโดยละเอียดมากขึ้นด้วยสตริงในการแปลตรรกะทางธุรกิจอายุ 25 ปี (จาก COBOL เป็น Java) ปราก ฎว่าฉันไม่มีความรู้อย่างลึกซึ้งเกี่ยวกับคลาสStringUtils ฉันจึงต้องสร้างทุกอย่างขึ้นมาเอง สิ่งที่ผมหมายถึง? ความจริงที่ว่าคุณไม่จำเป็นต้องเขียนงานบางอย่างที่เกี่ยวข้องกับการจัดการสตริงด้วยตัวเอง แต่ใช้โซลูชันสำเร็จรูป ตัวเองเขียนผิดอะไร? อย่างน้อยนี่ก็เป็นโค้ดเพิ่มเติมที่ถูกเขียนไว้เมื่อนานมาแล้ว ความกดดันไม่น้อยคือปัญหาของการทดสอบโค้ดที่เขียนเพิ่มเติม เมื่อเราใช้ไลบรารี่ที่พิสูจน์ตัวเองแล้วว่าดี เราคาดหวังว่าไลบรารีนั้นได้รับการทดสอบแล้ว และเราไม่จำเป็นต้องเขียนกรณีทดสอบจำนวนมากเพื่อทดสอบ มันบังเอิญว่าชุดวิธีการทำงานกับสตริงใน Java มีขนาดไม่ใหญ่นัก มีวิธีการไม่มากนักที่จะเป็นประโยชน์ต่อการทำงาน คลาสนี้ยังถูกสร้างขึ้นเพื่อให้ตรวจสอบ NullPointerException โครงร่างของบทความของเราจะเป็นดังนี้:
  1. วิธีการเชื่อมต่อ?
  2. ตัวอย่างจากงานของฉัน: ฉันสร้าง ไม้ค้ำจักรยานโดยไม่รู้ว่ามีประโยชน์เช่นนี้ได้อย่างไร
  3. ลองดูวิธีอื่นที่ฉันพบว่าน่าสนใจ
  4. มาสรุปกัน
ทุกกรณีจะถูกเพิ่มไปยังพื้นที่เก็บข้อมูลแยกต่างหากในองค์กรชุมชน Javarush บน GitHub จะมีตัวอย่างและการทดสอบแยกต่างหากสำหรับพวกเขา

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. ตัวอย่างจากโครงการจริง

  • วิธี leftPad

ตัวอย่างแรกโดยทั่วไปดูงี่เง่ามากในตอนนี้ซึ่งเป็นเรื่องที่ดีมากที่เพื่อนร่วมงานของฉันรู้เกี่ยวกับ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();
}
โดยพื้นฐานแล้ว ฉันเอาแนวคิดที่ว่าเราสามารถหาความแตกต่างระหว่างค่าดั้งเดิมกับค่าที่ตัดแต่งแล้วเติมด้วยศูนย์ข้างหน้า เมื่อต้องการทำสิ่งนี้ ฉันใช้IntStreamเพื่อทำการดำเนินการเดียวกัน 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. //then คือบล็อกที่มีการตรวจสอบผลลัพธ์ของบล็อกเมื่อ
หากคุณเรียกใช้งาน พวกเขาจะยืนยันว่าทุกอย่างทำงานตามที่คาดไว้

  • วิธีการ stripStart

ที่นี่ฉันต้องแก้ไขปัญหาด้วยบรรทัดที่อาจมีช่องว่างและลูกน้ำที่จุดเริ่มต้น หลังจากการเปลี่ยนแปลงพวกเขาไม่ควรมีความหมายใหม่ คำชี้แจงปัญหามีความชัดเจนมากขึ้นกว่าเดิม ตัวอย่างบางส่วนจะเสริมความเข้าใจของเรา: “, , books” -> “books” “,,, books” -> “books” b , books” -> “b , books” เช่นเดียวกับในกรณีของ leftPad ฉันได้เพิ่ม คลาส 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);
   }
}

  • วิธีการ isEmpty

แน่นอนว่าวิธีนี้ง่ายกว่ามาก แต่ก็ไม่ได้ทำให้มีประโยชน์น้อยลงเลย ขยายขีดความสามารถของ เมธอด String.isEmpty()ซึ่งเพิ่มการตรวจสอบค่าว่างด้วย เพื่ออะไร? เมื่อต้องการหลีกเลี่ยง NullPointerException นั่นคือเพื่อหลีกเลี่ยงการเรียกวิธีการบนตัวแปรที่เป็นnull ดังนั้นเพื่อไม่ให้เขียน:
if(value != null && value.isEmpty()) {
   //doing something
}
คุณสามารถทำได้:
if(StringUtils.isEmpty(value)) {
   //doing something
}
ข้อดีของวิธีนี้คือชัดเจนทันทีว่าจะใช้วิธีใด

2. การวิเคราะห์วิธีการอื่นของคลาส StringUtils

ตอนนี้เรามาพูดถึงวิธีการเหล่านั้นที่ในความคิดของฉันสมควรได้รับความสนใจเช่นกัน การพูดโดยทั่วไปเกี่ยวกับStringUtilsมันคุ้มค่าที่จะบอกว่ามันมีวิธีการที่ปลอดภัยแบบ null ซึ่งคล้ายกับที่พบใน คลาส String (เช่นเดียวกับกรณีของ วิธี isEmpty ) มาดูกันดีกว่า:

  • วิธีการเปรียบเทียบ

วิธีการดังกล่าวมีอยู่ในStringและจะส่ง NullPointerException หากเมื่อเปรียบเทียบสองสตริง หนึ่งในนั้นเป็นโมฆะ เพื่อหลีกเลี่ยงการตรวจสอบที่น่าเกลียดในโค้ดของเรา เราสามารถใช้ เมธอด 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. บรรจุเป็นวิธีการตรวจสอบว่าสตริงที่คาดหวังอยู่ภายในสตริงอื่นหรือไม่ สิ่งนี้มีประโยชน์อย่างไร? คุณสามารถใช้วิธีนี้ได้หากต้องการให้แน่ใจว่ามีคำบางคำในข้อความ

    ตัวอย่าง:

    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. มีไม่มี - เมื่อพิจารณาจากชื่อ คุณสามารถเข้าใจสิ่งที่กำลังตรวจสอบได้แล้ว ไม่ควรมีเส้นอยู่ข้างใน สิ่งที่มีประโยชน์แน่นอน ค้นหาอักขระที่ไม่ต้องการอย่างรวดเร็ว ;) ในบอทโทรเลข ของเรา เราจะกรองคำหยาบคาย และจะไม่เพิกเฉยต่อวิธีการตลกๆ เหล่านี้

    และตัวอย่าง เราจะอยู่ที่ไหนถ้าไม่มีพวกเขา:

    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

  • วิธีการ defaultString

ชุดวิธีการที่ช่วยหลีกเลี่ยงการเพิ่มข้อมูลเพิ่มเติมหากสตริงเป็นโมฆะ และคุณจำเป็นต้องตั้งค่าเริ่มต้นบางส่วน มีตัวเลือกมากมายให้เหมาะกับทุกรสนิยม หัวหน้าในหมู่พวกเขาคือStringUtils.defaultString(final String str, Final String defaultStr) - ใน กรณีที่ str เป็นโมฆะ เราก็จะส่ง ค่าไปที่ defaultStr ตัวอย่างจากเอกสารประกอบ:
StringUtils.defaultString(null, "NULL")  = "NULL"
StringUtils.defaultString("", "NULL")    = ""
StringUtils.defaultString("bat", "NULL") = "bat"
สะดวกมากที่จะใช้เมื่อคุณสร้างคลาส POJO ด้วยข้อมูล

  • ลบวิธี Whitespace

นี่เป็นวิธีการที่น่าสนใจแม้ว่าจะมีตัวเลือกไม่มากนักสำหรับการสมัครก็ตาม ในขณะเดียวกันหากเกิดกรณีเช่นนี้วิธีการนี้จะมีประโยชน์มากอย่างแน่นอน มันจะลบช่องว่างทั้งหมดออกจากสตริง ไม่ว่าช่องว่างนี้จะอยู่ที่ไหนก็จะไม่มีร่องรอยของมัน))) ตัวอย่างจากเอกสาร:
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)เป็นเพียงโบนัส เพราะนี่เป็นเรื่องไร้สาระ) นอกจากนี้ยังมีวิธีที่ ละเว้นกรณี

  • เท่ากับวิธีการ

ตัวอย่างที่ดีของวิธีการที่ปลอดภัยแบบ null ที่เปรียบเทียบสองสตริง อะไรก็ตามที่เราใส่ลงไป คำตอบก็จะอยู่ที่นั่น และมันจะไม่มีข้อผิดพลาด ตัวอย่าง:
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
แน่นอนว่ายังมีเท่ากับ IgnoreCase - ทุกอย่างทำในลักษณะเดียวกันทุกประการ มีเพียงเราเท่านั้นที่เพิกเฉยต่อกรณีนี้ มาดูกัน?
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

  • เท่ากับวิธีใดก็ได้

ไปข้างหน้าและขยายวิธี การ เท่ากับ สมมติว่าแทนที่จะตรวจสอบความเท่าเทียมกันหลายครั้ง เราต้องการดำเนินการอย่างหนึ่ง สำหรับสิ่งนี้ เราสามารถส่งผ่านสตริงที่จะเปรียบเทียบชุดสตริงได้ หากรายการใดรายการหนึ่งเท่ากับสตริงที่เสนอ ก็จะเป็น 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
นอกจากนี้ยังมีเท่ากับAnyIgnoreCase และตัวอย่างสำหรับมัน:
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