1. ภาพรวม
ในบทความสั้น ๆ นี้เราจะตรวจสอบและพูดคุยเกี่ยวกับเทคนิคต่างๆในการลบอักขระสุดท้ายของString
2. การใช้String.substring ()
วิธีที่ง่ายที่สุดคือใช้วิธีการสตริงย่อยในตัว()ของคลาสString
ในการลบอักขระสุดท้ายของสตริงที่กำหนดเราต้องใช้พารามิเตอร์สองตัว: 0เป็นดัชนีเริ่มต้นและดัชนีของอักขระสุดท้าย เราสามารถบรรลุสิ่งนั้นได้โดยเรียกเมธอดString 's length ()และลบ1ออกจากผลลัพธ์
อย่างไรก็ตามวิธีนี้ไม่ปลอดภัยและถ้าเราใช้สตริงว่างก็จะล้มเหลว
เพื่อเอาชนะปัญหาเกี่ยวกับสตริงว่างและสตริงว่างเราสามารถรวมเมธอดในคลาสตัวช่วย:
public static String removeLastChar(String s)
เราสามารถ refactor โค้ดและใช้ Java 8:
public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); }
3. การใช้StringUtils.substring ()
แทนที่จะสร้างวงล้อใหม่เราสามารถใช้คลาสStringUtilsจากไลบรารีApache Commons Lang3ซึ่งมีการทำงานของString ที่เป็นประโยชน์ หนึ่งในนั้นเป็นโมฆะปลอดภัยย่อย ()วิธีการซึ่งมีหน้าที่จัดการข้อยกเว้น
ในการรวมStringUtilsเราต้องอัปเดตไฟล์pom.xmlของเรา:
org.apache.commons commons-lang3 3.0
StringUtils.substring ()ต้องการพารามิเตอร์สามตัว: สตริงที่กำหนดดัชนีของอักขระตัวแรก (ในกรณีของเราจะเป็น 0 เสมอ) และดัชนีของอักขระสุดท้าย อีกครั้งเราสามารถใช้วิธีlength ()และลบ1:
String TEST_STRING = "abcdef"; StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);
กระนั้นการดำเนินการนี้จะไม่ปลอดภัยอีกต่อไป มันจะทำงานกับสตริงว่างได้ดีแม้ว่า
4. การใช้StringUtils.chop ()
StringUtilsระดับให้สับ ()วิธีการที่ทำงานได้ดีกับสถานการณ์ขอบทั้งหมด: ว่างเปล่าและ null Strings
ใช้งานง่ายมากและต้องการพารามิเตอร์เดียวเท่านั้น: String จุดประสงค์เดียวคือการลบอักขระสุดท้าย ไม่มีอะไรมากไม่มีน้อย:
StringUtils.chop(TEST_STRING);
5. การใช้นิพจน์ทั่วไป
นอกจากนี้เรายังสามารถลบอักขระสุดท้าย (หรืออักขระจำนวนเท่าใดก็ได้) ออกจากสตริงโดยใช้นิพจน์ทั่วไปให้เกิดประโยชน์
ตัวอย่างเช่นเราสามารถใช้เมธอดreplaceAll ()ของคลาสStringเองซึ่งรับสองพารามิเตอร์: นิพจน์ทั่วไปและสตริงการแทนที่:
TEST_STRING.replaceAll(".$", "");
ทราบว่าเพราะเราเรียกวิธีการในการString - การดำเนินการของหลักสูตรไม่เป็นโมฆะปลอดภัย
นอกจากนี้นิพจน์replaceAll ()และนิพจน์ทั่วไปอาจซับซ้อนตั้งแต่แรกเห็น คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ regex ได้ที่นี่ แต่เพื่อให้ตรรกะเป็นมิตรกับผู้ใช้มากขึ้นเราสามารถรวมไว้ในคลาสผู้ช่วย:
public static String removeLastCharRegex(String s) { return (s == null) ? null : s.replaceAll(".$", ""); }
โปรดทราบว่าหากStringลงท้ายด้วยขึ้นบรรทัดใหม่วิธีการข้างต้นจะล้มเหลวเป็น“.” ใน regex จะจับคู่อักขระใด ๆ ยกเว้นตัวยุติบรรทัด
สุดท้ายให้เขียนการใช้งานใหม่ด้วย Java 8 :
public static String removeLastCharRegexOptional(String s) { return Optional.ofNullable(s) .map(str -> str.replaceAll(".$", "")) .orElse(s); }
6. บทสรุป
ในบทความสั้น ๆ นี้เราได้พูดถึงวิธีต่างๆในการลบเฉพาะอักขระสุดท้ายของString - คู่มือบางอย่างบางอย่างพร้อมใช้งาน
และหากเราต้องการความยืดหยุ่นมากขึ้นและต้องการลบอักขระเพิ่มเติมเราสามารถแก้ปัญหาขั้นสูงด้วยนิพจน์ทั่วไป
เช่นเคยรหัสที่ใช้ตลอดบทความสามารถพบได้บน GitHub