บทความนี้อธิบายการดำเนินการของการสกัดเนื้อหาปกติของ Java ในวงเล็บ แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
ฉันเคยพบปัญหาในงานของฉันซึ่งฉันต้องแยกเนื้อหาในแต่ละวงเล็บในสตริง ฉันค้นหาออนไลน์และพบว่าการแสดงออกปกติสามารถใช้เพื่อแยกเนื้อหาในวงเล็บ การใช้งานเฉพาะมีดังนี้:
นำเข้า java.util.arraylist; นำเข้า java.util.list; นำเข้า java.util.regex.matcher; นำเข้า java.util.regex.pattern; extractMessage คลาสสาธารณะ วงเล็บ] 79 ~ "; รายการ <String> list = extractMessageByRegular (MSG); สำหรับ (int i = 0; i <list.size (); i ++) {system.out.println (i+"->"+list.get (i)); }} / ** * ใช้นิพจน์ทั่วไปเพื่อแยกเนื้อหาในวงเล็บ * @param msg * @return * / รายการคงที่สาธารณะ <String> ExtractMessageByRegular (สตริงผงชูรส รูปแบบ p = pattern.compile ("(// [[^//]]*//])"); Matcher M = P.Matcher (MSG); ในขณะที่ (m.find ()) {list.add (m.group (). substring (1, m.group (). ความยาว ()-1)); } return list; -ผลลัพธ์ผลลัพธ์มีดังนี้:
0-> วงเล็บที่ 1
1-> วงเล็บที่สอง
2-> วงเล็บที่ 3
สิ่งนี้เสร็จสิ้นการทำงานของรหัสอย่างรวดเร็ว แต่หลังจากนั้นฉันก็พบว่าหากวงเล็บยังคงมีวงเล็บอยู่การแสดงออกปกติจะสูญเสียเอฟเฟกต์ ฉันต้องหาวิธีแก้ปัญหาด้วยตัวเอง หลังจากการวิจัยในที่สุดฉันก็พบวิธีแก้ปัญหา การใช้งานเฉพาะมีดังนี้:
แพ็คเกจ com.perry.test; นำเข้า java.util.arraylist; นำเข้า java.util.list; นำเข้า java.util.regex.matcher; นำเข้า java.util.regex.pattern; extractmessage ระดับสาธารณะ วงเล็บมีวงเล็บ]] <[3rd Bracket] 79 ~ "; รายการ <string> list = extractMessage (msg); สำหรับ (int i = 0; i <list.size (); i ++) {system.out.println (i+"->"+list.get (i)); }} / ** * แยกเนื้อหาในวงเล็บและละเว้นวงเล็บในวงเล็บ * @param msg * @return * / รายการคงที่สาธารณะ <String> ExtractMessage (String msg) {list <string> list = new ArrayList <String> (); int start = 0; int startFlag = 0; int endflag = 0; สำหรับ (int i = 0; i <msg.length (); i ++) {ถ้า (msg.charat (i) == '[') {startflag ++; if (startFlag == endflag + 1) {start = i; }} อื่นถ้า (msg.charat (i) == ']') {endflag ++; if (endflag == startFlag) {list.add (msg.substring (เริ่ม + 1, i)); }}} รายการส่งคืน; -ผลลัพธ์ผลลัพธ์มีดังนี้:
0-> วงเล็บที่ 1
1-> ตัวยึดที่สอง [วงเล็บมีวงเล็บ]
2-> วงเล็บที่ 3
แนวคิดหลักคือการสำรวจสตริงและทำเครื่องหมายตำแหน่งเริ่มต้นและจุดสิ้นสุดของวงเล็บ หากเป็นตำแหน่งสุดท้ายที่สอดคล้องกับตำแหน่งเริ่มต้นของวงเล็บการนับจำนวนตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดจะเหมือนกันดังนั้นเนื้อหาของวงเล็บที่สมบูรณ์จะถูกดักจับ
PS: นี่คือเครื่องมือการแสดงออกปกติที่สะดวกมากสำหรับการอ้างอิงของคุณ:
JavaScript Expression Expression Online Testing Tool:
http://tools.vevb.com/regex/javascript
เครื่องมือสร้างออนไลน์การแสดงออกปกติ:
http://tools.vevb.com/regex/create_reg
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "ทักษะการแสดงออกปกติของ Java", "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "Java Operation Dom Skills", "Java File
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน