รู้เบื้องต้นเกี่ยวกับ 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
GO TO FULL VERSION