วิธีใช้ Pattern, Matcher ใน Java regex API เพื่อลบบรรทัดเฉพาะ

Oct 19 2020

ฉันมีแยกสตริงซับซ้อนผมต้องลบความคิดเห็น , ช่องว่างและให้ทุกหมายเลขแต่เปลี่ยนทุกสตริงเข้าไปในตัวละคร หาก-เครื่องหมายอยู่ที่จุดเริ่มต้นและตามด้วยตัวเลขให้ถือว่าเป็นจำนวนลบแทนตัวดำเนินการ

ความคิดเห็นมีรูปแบบ?<space>comments<space>?(ความคิดเห็นเป็นตัวยึด)

อินพุต:

-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b

เอาท์พุท:

 ["-122","+","2","?","s","a","b"]  

(สตริงทั้งหมดเป็นอักขระและไม่มีช่องว่างไม่มีความคิดเห็น)

คำตอบ

2 ArvindKumarAvinash Oct 19 2020 at 05:41
  1. แทนที่สตริงที่ไม่พึงประสงค์ด้วย\s*\?\s*\w+\s*(?=\?) ""คุณสามารถเชื่อมโยงString#replaceAllเพื่อลบช่องว่างที่เหลืออยู่ได้ โปรดทราบว่า?=หมายถึงการมองเชิงบวกและในที่นี้หมายถึง\s*\?\s*\w+\s*ตามด้วย?. ฉันหวังว่าคุณจะรู้แล้วว่า\sระบุช่องว่างและ\wระบุอักขระคำ
  2. จากนั้นคุณสามารถใช้ regex ^-\d+|\d+|\Dซึ่งหมายถึงจำนวนเต็มลบในจุดเริ่มต้น (เช่น^-\d+) หรือหลัก (เช่น\d+) หรือไม่ใช่ตัวเลข ( \D)

การสาธิต:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "-122+2 ? comments ?sa b";
        str = str.replaceAll("\\s*\\?\\s*\\w+\\s*(?=\\?)", "").replaceAll("\\s+", "");

        Pattern pattern = Pattern.compile("^-\\d+|\\d+|\\D");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

เอาท์พุต:

-122
+
2
?
s
a
b