تصف هذه المقالة تشغيل استخراج Java العادي للمحتوى بين قوسين. شاركه للرجوع إليه ، على النحو التالي:
واجهت مرة واحدة مشكلة في عملي ، والتي كنت بحاجة لاستخراج المحتوى في كل شريحة في سلسلة. لقد بحثت عبر الإنترنت ووجدت أنه يمكن استخدام التعبيرات العادية لاستخراج المحتوى بين قوسين. التنفيذ المحدد هو كما يلي:
استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد java.util.regex.matcher ؛ استيراد java.util.regex.pattern ؛ extractmessmess extractmessage public {2nd static void main ([] قائمة <Tring> list = extractMessageByregular (msg) ؛ لـ (int i = 0 ؛ i <list.size () ؛ i ++) {system.out.println (i+"->"+list.get (i)) ؛ }} / ** * استخدم التعبيرات العادية لاستخراج المحتوى في قوسين * param msg * @REGANT * / قائمة ثابتة عامة <string> extractMessageByRegular (String msg) {list <string> list = new ArrayList <string> () ؛ pattern p = pattern.compile ("(// [[^//]]*//])") ؛ matcher m = p.matcher (msg) ؛ بينما (m.find ()) {list.add (M.Group (). } قائمة الإرجاع ؛ }}نتيجة الإخراج على النحو التالي:
0-> القوس الأول
1-> القوس الثاني
2-> القوس الثالث
أكمل هذا بسرعة عمل الكود ، لكن في وقت لاحق وجدت أنه إذا كانت الأقواس لا تزال تحتوي على قوسين ، فإن التعبير العادي سيفقد تأثيره. اضطررت إلى إيجاد طريقة لحلها بنفسي. بعد البحث ، وجدت أخيرًا حلاً. التنفيذ المحدد هو كما يلي:
package com.perry.test ؛ import java.util.arraylist ؛ import java.util.list ؛ import java.util.regex.matcher ؛ import java.util.regex.pattern ؛ public class extractmessage {public static void main (string) {String msg = " القوس يحتوي على قوسين]] <[القوس الثالث] 79 ~ "؛ قائمة <Tring> 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 ++) {if (msg.charat (i) == '[') {StartFlag ++ ؛ if (startFlag == endflag + 1) {start = i ؛ }} آخر إذا (msg.charat (i) == ']') {endflag ++ ؛ if (endflag == startFlag) {list.add (msg.subString (start + 1 ، i)) ؛ }}} قائمة الإرجاع ؛ }}نتيجة الإخراج على النحو التالي:
0-> القوس الأول
1-> القوس الثاني [القوس يحتوي على قوسين]
2-> القوس الثالث
الفكرة الرئيسية هي اجتياز السلسلة وتمييز المواضع الأولى والنهاية للأقواس. إذا كان هذا هو الموضع النهائي المقابل لموضع البداية للأقواس ، فإن تعداد موضع البداية والموضع النهائي هو نفسه ، لذلك يتم اعتراض محتوى الأقواس الكاملة.
ملاحظة: فيما يلي أداة تعبير منتظمة مريحة للغاية للرجوع إليها:
أداة اختبار javaScript التعبير العادي عبر الإنترنت:
http://tools.vevb.com/regex/javaScript
أداة توليد التعبير العادية عبر الإنترنت:
http://tools.vevb.com/regex/create_reg
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض المواضيع: "Java Presconse Expressions" ، "Java Data Structure and Algorithm Tutorial" ، "Java Operation DOM Node Markets" ، "Java File and Directory Operation Markets Summary" و "Java Cache Operation Marketary Marketary"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.