Cách sử dụng Pattern, Matcher trong Java regex API để xóa một dòng cụ thể
Oct 19 2020
Tôi có một phân tách chuỗi phức tạp, tôi cần xóa các chú thích , dấu cách và giữ lại tất cả các số nhưng thay đổi tất cả chuỗi thành ký tự . Nếu -dấu ở đầu và theo sau là một số, hãy coi nó như một số âm thay vì một toán tử
nhận xét có phong cách của ?<space>comments<space>?(các nhận xét là một người giữ chỗ)
Đầu vào :
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
đầu ra:
["-122","+","2","?","s","a","b"]
(tất cả chuỗi thành ký tự và không có dấu cách, không có nhận xét)
Trả lời
2 ArvindKumarAvinash Oct 19 2020 at 05:41
- Thay thế chuỗi không mong muốn
\s*\?\s*\w+\s*(?=\?)bằng"". Bạn có thể xâu chuỗiString#replaceAllđể loại bỏ bất kỳ khoảng trắng nào còn lại. Lưu ý rằng điều đó?=có nghĩa là cái nhìn tích cực và ở đây nó có nghĩa là\s*\?\s*\w+\s*theo sau bởi một?. Tôi hy vọng bạn đã biết rằng\schỉ định khoảng trắng và\wchỉ định một ký tự từ. - Sau đó, bạn có thể sử dụng regex,
^-\d+|\d+|\Dcó nghĩa là số nguyên âm ở đầu (tức là^-\d+) hoặc chữ số (tức là\d+) hoặc không phải chữ số (\D).
Bản giới thiệu:
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());
}
}
}
Đầu ra:
-122
+
2
?
s
a
b