ما هو التعبير العادي
التعبيرات العادية هي مواصفات يمكن استخدامها لمطابقة الأنماط واستبدالها. التعبير العادي هو نمط حرفي يتكون من أحرف عادية (مثل الأحرف من من A إلى Z) والأحرف الخاصة (metacharacters). يتم استخدامه لوصف سلاسل واحدة أو أكثر ليتم مطابقتها عند البحث عن جسم الحرفي. يعمل التعبير العادي كقالب لمطابقة نمط الأحرف مع السلسلة التي تم بحثها.
تستخدم Java تعبيرات منتظمة لاستخراج البيانات
تعبيرات Java العادية مفيدة للغاية. من قبل ، اعتادوا تقسيم نص TXT كبير 3M إلى نصوص صغيرة متعددة. الكلمات المكتوبة في C# موجزة للغاية ، والرمز هو فقط حوالي عشرين سطرًا. كتبت لهم في جافا اليوم. من المؤكد أن جافا هي كلمة للغاية.
لن أقوم بنشر الكود لتقسيم الملف. سوف أنشر بشكل أساسي كيفية استخدام التعبيرات العادية لتجميع سلاسل كبيرة:
على سبيل المثال ، يوجد الآن ملف نصي endlist.txt مع المحتوى التالي:
1300102 ، بكين 1300103 ، بكين 1300104 ، بكين 1300105 ، بكين 1300106 ، بكين 1300107 ، بكين 1300108 ، بكين 1300109 ، بكين 1300110 ، بكين 1300111 ، Beijing 1300112 ، beijing 1300113 ، beijing 130013 ، beijing 1300jing 1300jing. 1300115 ، بكين 1300116 ، بكين 1300117 ، بكين 1300118 ، بكين 1300119 ، بكين
يمثل الرقم المكون من سبعة أرقام الأرقام السبعة الأولى من رقم الهاتف المحمول ، وتشير الأحرف الصينية التي تقف وراءه إلى مكان ملكية الرقم. الآن أريد أن أكتب هذه المحتويات في هذه الملفات كـ 130 131 132 ... على التوالي. txt 131.txt 132.txt .......
public static void main (String args []) {file file = null ؛ BufferedReader BR = NULL ؛ StringBuffer Buffer = null ؛ String ChildPath = "SRC/EndList.txt" ؛ سلسلة البيانات = "" ؛ حاول {file = ملف جديد (ChildPath) ؛ العازلة = جديد stringBuffer () ؛ inputStreamReader ISR = جديد inputStreamReader (FileInputStream جديد (ملف) ، "UTF-8") ؛ br = جديد bufferedreader (ISR) ؛ int s ؛ بينما ((s = br.read ())! = -1) {buffer.append ((char) s) ؛ } data = buffer.toString () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } map <string ، arraylist <string >> resultMap = new HashMap <string ، ArrayList <string >> () ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) {resultMap.put ("13"+i ، new ArrayList <String> ()) ؛ } نمط نمط = pattern.compile ("(// d {3}) (// d {4} ، [/u4e00-/u9fa5]*// n)") ؛ Matcher Matcher = pattern.matcher (data) ؛ بينما (matcher.find ()) {resultMap.get (matcher.group (1)). add (matcher.group (2)) ؛ } لـ (int i = 0 ؛ i <10 ؛ i ++) {if (resultMap.get ("13" + i) .size ()> 0) {try {file outfile = new file ("src/13" + i + ".txt") ؛ FileOutputStream OutputStream = جديد fileOutputStream (Outfile) ؛ OutputStreamWriter Writer = New OutputStreamWriter (OutputStream ، "UTF-8") ؛ ArrayList <string> templist = resultMap.get ("13" + i) ؛ لـ (int j = 0 ؛ j <templist.size () ؛ j ++) {writer.append (resultMap.get ("13"+i) .get (j)) ؛ } constr.close () ؛ outputStream.Close () ؛ } catch (استثناء e) {// todo catch e.printstacktrace () ؛ }}}}يستخدم السطر 24 التعبير العادي "(// d {3}) (// d {4} ، [/u4e00-/u9fa5]*// n)" المحتويات في كل () هي مجموعة ، ويبدأ الفهرس من 1 ، ويمثل 0 التعبير بالكامل. لذلك ، ينقسم هذا التعبير إلى مجموعتين. تمثل المجموعة الأولى 3 أرقام ، وتمثل المجموعة الثانية 4 أرقام بالإضافة إلى شخصيات صينية متعددة بالإضافة إلى حرف جديد. يظهر الاستخراج في الأسطر 26-28.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة لدراستك أو عملك. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.