รู้เบื้องต้นเกี่ยวกับ StringUtils

StringUtilsเป็นคลาส Apache Commons ที่ใช้มากที่สุด ประกอบด้วยโปรแกรมอรรถประโยชน์และวิธีการต่างๆ ที่ช่วยให้นักพัฒนาไม่ต้องเขียนสำเร็จรูปหรือโค้ดที่เทอะทะสำหรับการทำงานขั้นพื้นฐาน

หลายเมธอดใน คลาส StringUtilsมีjava.lang.String ที่เทียบเท่า แต่ไม่เหมือนกับ เมธอด java.lang.String ตรงที่ เป็น null-safe ซึ่งหมายความว่า NullPointerException จะไม่เกิดขึ้นในช่วงเวลาที่ไม่คาดคิดที่สุด

Apache Commons มีหลายวิธี และเราจะพิจารณาวิธีการที่ใช้บ่อยที่สุด

รายการเมธอดของ StringUtils:

มันว่างเปล่า() ตรวจสอบว่าสตริงว่างหรือไม่
เท่ากับ () เปรียบเทียบสตริง
เปรียบเทียบ() เปรียบเทียบสตริง
ดัชนีของ () การค้นหาสตริงย่อยในสตริง
สุดท้ายดัชนีของ() การค้นหาสตริงย่อยในสตริง
ประกอบด้วย() ตรวจสอบว่าสตริงย่อยอยู่ในสตริงหรือไม่
มีIgnoreCase() ตรวจสอบการเกิดขึ้นของสตริงย่อยในสตริง โดยไม่สนใจตัวพิมพ์เล็กและใหญ่
มีใด ๆ () ตรวจสอบว่าสตริงย่อยเกิดขึ้นที่ใดก็ได้ในสตริงหรือไม่
ประกอบด้วยไม่มี() ตรวจสอบว่าสตริงย่อยเกิดขึ้นที่ใดก็ได้ในสตริงหรือไม่
ประกอบด้วยเท่านั้น () ตรวจสอบว่าสตริงย่อยอยู่ในสตริงหรือไม่
สตริงย่อย () รับสตริงย่อย
แยก() แยกสตริงออกเป็นสตริงย่อย
เข้าร่วม() เชื่อมต่อสตริงย่อย
ลบ() การลบสตริงย่อย
แทนที่() แทนที่สตริงย่อย
นับการแข่งขัน () การนับจำนวนการแข่งขัน

StringUtils.isEmpty() และ StringUtils.isBlank()

ทั้งสองวิธีใช้ในการตรวจสอบว่าสตริงมีข้อความหรือไม่ พวกเขาคืนค่าจริงถ้าสตริงว่างจริงๆ นอกจากนี้isBlank()จะส่งกลับค่าจริงหากสตริงมีเฉพาะช่องว่าง

พวกเขายังมีวิธีการผกผันของตัวเอง: isNotEmpty()และisNotBlank()

มาดูกันว่าคุณสามารถใช้isEmpty()ร่วมกับjava.lang.String.isEmpty() ของมัน เช่นเดียวกับisBlank() :

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(!nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

มีสามตัวแปรประเภทString ที่ นี่ หนึ่งชี้ไปที่nullส่วนที่สองไม่เป็นโมฆะแต่ไม่มีเนื้อหา (สตริงว่าง) และอันที่สามไม่ว่างเปล่า แต่จะพิมพ์ผลลัพธ์ที่ว่างเปล่า

การรันโค้ดนี้ส่งผลให้:

emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException

เมธอดisEmpty() ที่สร้าง ขึ้นในjava.lang.String นั้น ไม่ปลอดภัย คุณจะได้รับNullPointerException อย่างง่ายดาย หากคุณพยายามตรวจสอบว่าว่างเปล่าหรือไม่ เนื่องจากคุณเรียกใช้เมธอดโดยใช้การอ้างอิงเป็นค่าว่าง จำเป็นต้องตรวจสอบล่วงหน้าว่าการอ้างอิงเป็นโมฆะหรือไม่:

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(nullValue != null && !nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

ตอนนี้ส่งผลให้:

emptyValue is emptyValue
blankValue is blankValue

และถ้าเราทดสอบวิธีการเหล่านี้บนnullString:

String nullValue = null;

if(StringUtils.isEmpty(nullValue)) {
   System.out.println("nullValue is emptyValue");
}

if(StringUtils.isBlank(nullValue)) {
   System.out.println("nullValue is blankValue");
}

จากนั้นเราจะได้รับ:

nullValue is emptyValue
nullValue is blankValue

เมธอดStringUtils เป็น nullปลอดภัยและให้ผลลัพธ์ที่คาดหวังแม้ว่าจะผ่านnullก็ตาม

StringUtils.equals()

เมธอดนี้เปรียบเทียบสองสตริงและส่งคืนค่าจริงหากเหมือนกันหรือหากการอ้างอิงทั้งคู่ชี้ไปที่nullแต่โปรดทราบว่าวิธีนี้คำนึงถึงขนาดตัวพิมพ์

มาดูกันว่ามันทำงานอย่างไร:

System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some information"));
System.out.println(StringUtils.equals("some information", null));
System.out.println(StringUtils.equals("some information",  "some information"));
System.out.println(StringUtils.equals("some additional information", "some information"));

ผลลัพธ์:

true
false
false
true
false

ในการเปรียบเทียบ วิธี การเท่ากับ ()จากStringUtilsกับjava.lang.String.equals() :

String nullValue = null;

System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "some information"));

System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("some information"));

สิ่งนี้นำคุณกลับไปที่:

true
false
Exception in thread "main" java.lang.NullPointerException

อีกครั้ง การเรียกใช้เมธอดใน การอ้างอิง ค่าว่างจะส่งผลให้เป็นNullPointerExceptionและคุณจะต้องตรวจสอบว่าตัวแปรอ้างอิงเป็นค่าว่างหรือไม่ก่อนที่จะใช้

StringUtils.compare()

การประกาศของวิธีนี้มีลักษณะดังนี้:

public static int compare(final String str1, final String str2)

เมธอดนี้เปรียบเทียบสองสตริงตามพจนานุกรม ดังที่เมธอด java.lang.String.compareTo()ทำส่งคืน:

  • 0 ถ้า str1 เท่ากับ str2 (หรือทั้งคู่เป็นโมฆะ)
  • ค่าน้อยกว่า 0 ถ้า str1 น้อยกว่า str2
  • ค่ามากกว่า 0 ถ้า str1 มากกว่า str2

ลำดับศัพท์เป็นลำดับพจนานุกรม มาดูกันว่าเราจะใช้สิ่งนี้ในโปรแกรมของเราได้อย่างไร:

System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "codeGym"));
System.out.println(StringUtils.compare("codeGym", null));
System.out.println(StringUtils.compare("codeGym", "CODEGYM"));
System.out.println(StringUtils.compare("codeGym", "codeGym"));

เราได้รับ:

0
-1
1
32
0

หมายเหตุ: ค่า Nullถือว่าน้อยกว่าค่าที่ไม่เป็นNull ค่าว่าง สองค่า ถือว่าเท่ากัน

ตรวจสอบว่าสตริงมีสตริงย่อยอื่นหรือไม่

ในการทำเช่นนี้StringUtilsมี 5 วิธี:

  • ประกอบด้วย()
  • มีIgnoreCase()
  • มีใด ๆ ()
  • ประกอบด้วยไม่มี()
  • ประกอบด้วยเท่านั้น ()

มี ()วิธีการคืนค่าจริงหรือเท็จขึ้นอยู่กับว่าลำดับการค้นหาอยู่ในลำดับอื่นหรือไม่

หากค่า null ถูกส่งผ่านไปยังเมธอดดังกล่าว มันจะคืน ค่า เป็นเท็จ หากผ่านค่าที่ไม่ใช่nullเมธอดจะเรียกjava.lang.String.indexOf(String str)บนอ็อบเจกต์ที่ส่งผ่าน

ตัวอย่าง:

String value = "CodeGym is cool";

System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(value, "CodeGym"));
System.out.println(StringUtils.contains(value, "C++"));
System.out.println(StringUtils.contains(value, "codegym"));

เมธอดนี้พิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นการเรียกครั้งล่าสุดจะส่งคืนค่าเท็จ ด้วย :

false
true
false
false

เมธอด"containAny()"จะคืนค่าจริงหากสตริงที่ส่งผ่านเป็นอาร์กิวเมนต์แรกมีสตริงย่อยอย่างน้อยหนึ่งรายการที่ส่งผ่านในอาร์กิวเมนต์ 2-N

ตัวอย่าง:

String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));

จะแสดง:

true

วิธีนี้ยังพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ด้วย

มีไม่มี () วิธีการ

เมื่อคุณต้องการตรวจสอบว่าสตริงบางรายการไม่มีข้อมูลใดๆ จากรายการ คุณสามารถใช้ เมธอด "containNone() " พารามิเตอร์แรกคือสตริง และพารามิเตอร์ต่อไปนี้คือสตริงที่ไม่ควรอยู่ในซิงก์เป้าหมาย

ตัวอย่าง:

String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));

เอาต์พุตคอนโซล:

false

การทำงานกับสตริงย่อย

การทำงานกับสตริงย่อยนั้นคล้ายกับการทำงานกับเมธอดของ คลาส String :

substring(String str, int start)
substring (String str, int start, int end)

เมธอดเหล่า นี้ส่งคืนสตริงย่อยจากสตริงstr สตริงถูกกำหนดโดยสองดัชนี: เริ่มต้นและสิ้นสุด และตามปกติใน Java อักขระตัวสุดท้ายของช่วงคือend- 1 ข้อดีของวิธีการเหล่านี้คืออะไร?

หากคุณส่งผ่านค่า null ไปยังเมธอดดังกล่าว มันจะคืนค่าค่า nullแทนการส่งข้อยกเว้น วิธีการเหล่านี้รองรับค่าดัชนีที่เป็นลบ ในกรณีนี้ สตริงถือเป็นลูปปิด อักขระตัวสุดท้ายจะตามด้วยอักขระตัวแรกและต่อไปเรื่อยๆ

มาดูกันว่าเราจะใช้มันอย่างไร:

System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));

การรันโค้ดด้านบนทำให้เรา:

ts j
ets java
null

StringUtils.split()

เมธอดที่ให้คุณแยกสตริงออกเป็นสตริงย่อยโดยใช้อักขระตัวคั่นพิเศษ หากมีหนึ่งในสตริงเป้าหมาย เมธอดจะส่งคืนอาร์เรย์ของสตริงย่อย หากไม่มีอักขระ ระบบจะส่งคืนอาร์เรย์ว่าง ถ้าnull ถูกส่งผ่านไปยัง method มันจะคืนค่าnull มาดูรหัสนี้และวิธีการทำงาน:

String myData = "Address, City, State, Zip, Phone, Email, Password";

System.out.println(Arrays.toString(StringUtils.split(myData, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));

ผลลัพธ์:

[Address,  City,  State,  Zip,  Phone,  Email,  Password]
null
[]

StringUtils.join()

เมธอดjoin()ช่วยให้คุณเชื่อมต่ออาร์เรย์ของสตริงเป็นสตริงเดียว ในเวลาเดียวกัน สามารถส่งผ่านอักขระตัวคั่นพิเศษซึ่งจะถูกเพิ่มระหว่างสตริงย่อยในสตริงผลลัพธ์ และถ้าnull ถูกส่งผ่านไปยังเมธอด มันจะคืนค่าnull

วิธีการ นี้ตรงกันข้ามกับ วิธี การ split() ลองดูตัวอย่างง่ายๆ นี้:

String myData = "Address, City, State, Zip, Phone, Email, Password";

String[] myString =  StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));

การรันโค้ดด้านบนทำให้เรา:

Address- City- State- Zip- Phone- Email- Password

StringUtils.replace()

ค้นหาสตริงภายในสตริง ค้นหาหากมี และแทนที่เหตุการณ์ทั้งหมดด้วยสตริงใหม่

การประกาศของวิธีนี้มีลักษณะดังนี้:

public static String replace(final String text, final String searchString, final String replacement)

หากไม่พบสตริงการค้นหาในข้อความ จะไม่มีอะไรเกิดขึ้นและข้อความจะยังคงเหมือนเดิม ตามตรรกะเดียวกัน หากข้อความเป็นnullเมธอดนี้จะส่งคืนค่าnull หากคุณกำลังมองหา สตริง nullหรือแทนที่สตริงย่อยด้วยnullเมธอดจะส่งคืนสตริงดั้งเดิม

ลองใช้วิธีนี้:

String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));

ผลลัพธ์:

CodeGym is the cool