นิพจน์ทั่วไปคืออะไร
นิพจน์ทั่วไปเป็นข้อกำหนดที่สามารถใช้สำหรับการจับคู่รูปแบบและการเปลี่ยน นิพจน์ทั่วไปเป็นรูปแบบตัวอักษรที่ประกอบด้วยอักขระธรรมดา (เช่นอักขระ A ถึง Z) และอักขระพิเศษ (Metacharacters) มันถูกใช้เพื่ออธิบายหนึ่งหรือมากกว่านั้นที่จะจับคู่เมื่อค้นหาร่างของตัวอักษร นิพจน์ทั่วไปทำหน้าที่เป็นเทมเพลตเพื่อให้ตรงกับรูปแบบอักขระกับสตริงที่ค้นหา
Java ใช้การแสดงออกปกติเพื่อแยกข้อมูล
การแสดงออกปกติของ Java นั้นมีประโยชน์มาก ก่อนหน้านี้พวกเขาใช้เพื่อแบ่งข้อความ txt ขนาดใหญ่ 3M เป็นข้อความเล็ก ๆ หลายข้อความ คำที่เขียนใน C# นั้นกระชับมากและรหัสมีเพียงประมาณยี่สิบบรรทัด ฉันเขียนพวกเขาใน Java วันนี้ Java เป็นคำพูดที่ดีมาก
ฉันจะไม่โพสต์รหัสเพื่อแยกไฟล์ ฉันจะโพสต์วิธีการใช้นิพจน์ทั่วไปในการจัดกลุ่มสายขนาดใหญ่:
ตัวอย่างเช่นตอนนี้มีไฟล์ข้อความ endlist.txt ที่มีเนื้อหาต่อไปนี้:
1300102, ปักกิ่ง 1300103, ปักกิ่ง 1300104, ปักกิ่ง 1300105, ปักกิ่ง 1300106, ปักกิ่ง 1300107, ปักกิ่ง 1300111111111111111111111111111111111 1300115, ปักกิ่ง 1300116, ปักกิ่ง 1300117, ปักกิ่ง 1300118, ปักกิ่ง 1300119, ปักกิ่ง
หมายเลขเจ็ดหลักแสดงถึงตัวเลขเจ็ดหลักแรกของหมายเลขโทรศัพท์มือถือและอักขระจีนที่อยู่ด้านหลังระบุสถานที่เป็นเจ้าของจำนวน ตอนนี้ฉันต้องการเขียนเนื้อหาเหล่านี้ลงในไฟล์เหล่านี้เป็น 130 131 132 ... ตามลำดับ txt 131.txt 132.txt .......
โมฆะคงที่สาธารณะหลัก (สตริง args []) {ไฟล์ไฟล์ = null; bufferedReader br = null; StringBuffer buffer = null; String childPath = "src/endlist.txt"; String data = ""; ลอง {file = ไฟล์ใหม่ (childpath); buffer = new StringBuffer (); InputStreamReader ISR = ใหม่ inputStreamReader (ใหม่ FileInputStream (ไฟล์), "UTF-8"); br = bufferedreader ใหม่ (ISR); int s; ในขณะที่ ((s = br.read ())! = -1) {buffer.append ((char) s); } data = buffer.toString (); } catch (exception e) {e.printstacktrace (); } แผนที่ <string, arraylist <String>> resultMap = ใหม่ hashmap <string, arraylist <String>> (); สำหรับ (int i = 0; i <10; i ++) {resultmap.put ("13"+i, arrayList ใหม่ <String> ()); } รูปแบบรูปแบบ = pattern.compile ("(// d {3}) (// d {4}, [/u4e00-/u9fa5]*// n)"); matcher matcher = pattern.matcher (ข้อมูล); ในขณะที่ (matcher.find ()) {resultmap.get (matcher.group (1)). เพิ่ม (matcher.group (2)); } สำหรับ (int i = 0; i <10; i ++) {ถ้า (resultmap.get ("13" + i) .size ()> 0) {ลอง {ไฟล์ outfile = ไฟล์ใหม่ ("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)); } writer.close (); outputstream.close (); } catch (exception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); -บรรทัด 24 ใช้นิพจน์ปกติ "(// d {3}) (// d {4}, [/u4e00-/u9fa5]*// n)" เนื้อหาในแต่ละ () เป็นกลุ่มดัชนีเริ่มต้นจาก 1 และ 0 แสดงถึงนิพจน์ทั้งหมด ดังนั้นการแสดงออกนี้แบ่งออกเป็นสองกลุ่ม กลุ่มแรกแสดงถึงตัวเลข 3 ตัวและกลุ่มที่สองแสดงตัวเลข 4 ตัวบวกอักขระจีนหลายตัวพร้อมอักขระใหม่ การสกัดจะแสดงในบรรทัด 26-28
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะช่วยในการศึกษาหรือทำงานของคุณ หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร