วิธีใช้ 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
- แทนที่สตริงที่ไม่พึงประสงค์ด้วย
\s*\?\s*\w+\s*(?=\?)""คุณสามารถเชื่อมโยงString#replaceAllเพื่อลบช่องว่างที่เหลืออยู่ได้ โปรดทราบว่า?=หมายถึงการมองเชิงบวกและในที่นี้หมายถึง\s*\?\s*\w+\s*ตามด้วย?. ฉันหวังว่าคุณจะรู้แล้วว่า\sระบุช่องว่างและ\wระบุอักขระคำ - จากนั้นคุณสามารถใช้ 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