เหตุใดใน Java 8 แยกบางครั้งจึงลบสตริงว่างเมื่อเริ่มต้นอาร์เรย์ผลลัพธ์
ก่อน Java 8เมื่อเราแยกสตริงว่างเช่น String[] tokens = "abc".split(""); กลไกการแยกจะแยกในสถานที่ที่มีเครื่องหมาย | |a|b|c| เนื่องจาก""มีพื้นที่ว่างก่อนและหลังอักขระแต่ละตัว ดังนั้นผลลัพธ์มันจะสร้างอาร์เรย์นี้ในตอนแรก ["", "a", "b", "c", ""] และต่อมาจะลบสตริงว่างต่อท้าย (เนื่องจากเราไม่ได้ระบุค่าลบให้กับlimitอาร์กิวเมนต์อย่างชัดเจน) ดังนั้นในที่สุดก็จะคืนค่า ["", "a", "b", "c"] ในกลไกการแบ่งJava 8ดูเหมือนจะเปลี่ยนไป ทีนี้เมื่อเราใช้ "abc".split("") เราจะได้["a", "b", "c"]อาร์เรย์แทน["", "a", "b", "c"]ดังนั้นดูเหมือนว่าสตริงว่างเมื่อเริ่มต้นจะถูกลบออกไปด้วย แต่ทฤษฎีนี้ล้มเหลวเพราะตัวอย่างเช่น "abc".split("a") ["", "bc"]ส่งกลับอาร์เรย์กับสตริงที่ว่างเปล่าในช่วงเริ่มต้น ใครช่วยอธิบายได้ว่าเกิดอะไรขึ้นที่นี่และกฎของการแยกเปลี่ยนไปอย่างไรใน Java 8