ฉันเชื่อว่าทุกคนมักใช้วิธีการแยกของสตริง แต่คุณได้พบกับสถานการณ์ต่อไปนี้:
ทุกคนคิดเกี่ยวกับผลการดำเนินการรหัสต่อไปนี้คืออะไร
โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// todo วิธี Auto-Generatd Stub String str1 = "A, B, C, A"; , b, c ,,, ""; string [] s1 = str1.split (",", "); string [] s2 = str2.split (", "); string [] s3 = str3.split (" "" "", "); ความยาว str3: "+"+ s3.length);}
ผลการดำเนินการ:
ทำไมผลลัพธ์นี้จึงพบ API เพื่อค้นหาวิธีแก้ปัญหา
สารละลาย:
โดยการดู API เราพบว่าวิธีการแยกที่ใช้กันทั่วไปของเราถูกส่งโดย 0 โดยค่าเริ่มต้น
โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// todo วิธี Auto-generatd Stub String str1 = "A, B, C, A"; , b, c ,,, ""; string [] s1 = str1.split (","); แยก (",", -1); "ความยาว str3:"+s3.length);}
หลังจากค้นหา API ฉันพบว่าในคลาสสตริงมีสองวิธีการโหลดแบบแยกส่วนหนักสองวิธี
1. สตริงสาธารณะ [] แยก (String regex)
สตริงนี้จะถูกแบ่งตามการแสดงออกปกติที่กำหนด
บทบาทของวิธีนี้ก็เหมือนกับการใช้นิพจน์ที่กำหนดและ จำกัด พารามิเตอร์ 0 เพื่อเรียกใช้วิธีการแยกพารามิเตอร์สองแบบ ดังนั้นอาร์เรย์จึงไม่รวมสตริงปลายทาง
ตัวอย่างเช่นสตริง "boo: และ: foo" สามารถสร้างผลลัพธ์ต่อไปนี้:
ผลลัพธ์ regex
: {"boo", "และ", "foo"} o {"b", "", ": และ: f"}
พารามิเตอร์:
regex -แก้ไขกฎหมายการแสดงออกปกติคืน:
อาร์เรย์สตริงซึ่งถูกโยนออกไปตามการจับคู่ของนิพจน์นิพจน์ปกติเพื่อแยกสตริงนี้:
patternyntaxexception -ถ้าไวยากรณ์ในนิพจน์ทั่วไปไม่ถูกต้อง
2. สตริงสาธารณะ [] แยก (String regex, int ขีด จำกัด )
สตริงนี้จะถูกแบ่งตามการแสดงออกปกติที่กำหนดโดยการจับคู่
อาร์เรย์ที่ส่งคืนโดยวิธีนี้มี sub -string ของสตริงนี้ sub -string ในอาร์เรย์ถูกจัดเรียงตามลำดับที่ปรากฏในสตริงนี้ หากนิพจน์ไม่ตรงกับส่วนใดส่วนหนึ่งของอินพุตอาร์เรย์รายได้มีเพียงองค์ประกอบเดียวนั่นคือสตริงนี้
แอปพลิเคชันโหมดควบคุมพารามิเตอร์ จำกัด ซึ่งมีผลต่อความยาวของอาร์เรย์ หากขีด จำกัด นี้มากกว่า 0 โหมดจะถูกใช้ n -once ส่วนใหญ่และความยาวของอาร์เรย์จะไม่มากกว่า N และรายการสุดท้ายของอาร์เรย์จะมีอินพุตทั้งหมดเกินขอบเขตการจับคู่สุดท้าย หาก n ไม่เป็นบวกโหมดจะถูกใช้ให้มากที่สุดและอาร์เรย์อาจมีความยาวใด ๆ หาก n คือ 0 โหมดจะถูกใช้ให้มากที่สุดเท่าที่จะเป็นไปได้อาร์เรย์อาจมีความยาวใด ๆ
ตัวอย่างเช่นสตริง "boo: และ: foo" สามารถสร้างผลลัพธ์ต่อไปนี้ด้วยพารามิเตอร์เหล่านี้:
ผลลัพธ์ regexlimit
: 2 {"boo", "และ: foo"}: 5 {"boo", "และ", "foo"}: -2 {"boo", "และ", "foo"} o 5 {"b" "", ": และ: f", "", "} o -2 {" b "," ",": และ: f ",", ","} o 0 {"b", "": และ: และ: f "}
รูปแบบของ str.split (regex, n) ที่เรียกว่าวิธีนี้เหมือนกับผลลัพธ์ที่เกิดจากนิพจน์ต่อไปนี้:
pattern.compile (regex) .split (str, n)
พารามิเตอร์:
regex -definition ปกติ
ขีด จำกัด -เกณฑ์การรักษาตามที่อธิบายไว้ข้างต้น
กลับ:
อาร์เรย์สตริงมันถูกกำหนดตามการจับคู่ของนิพจน์นิพจน์ทั่วไป
โยนออกไป:
patternyntaxexception -ถ้าไวยากรณ์ในนิพจน์ทั่วไปไม่ถูกต้อง