Cómo usar Pattern, Matcher en Java regex API para eliminar una línea específica
Oct 19 2020
Tengo una división de cadena complicada, necesito eliminar los comentarios , los espacios y mantener todos los números, pero cambiar todas las cadenas a caracteres . Si el -signo está al principio y seguido de un número, trátelo como un número negativo en lugar de un operador
el comentario tiene el estilo de ?<space>comments<space>?(los comentarios son un marcador de posición)
Entrada:
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
salida:
["-122","+","2","?","s","a","b"]
(toda la cadena en carácter y sin espacios, sin comentarios)
Respuestas
2 ArvindKumarAvinash Oct 19 2020 at 05:41
- Reemplace la cuerda no deseada
\s*\?\s*\w+\s*(?=\?)con"". Puede encadenarString#replaceAllpara eliminar cualquier espacio en blanco restante. Tenga en cuenta que eso?=significa anticipación positiva y aquí significa\s*\?\s*\w+\s*seguido de un?. Espero que ya sepas que\sespecifica espacios en blanco y\wespecifica un carácter de palabra. - Luego, puede usar la expresión regular,
^-\d+|\d+|\Dque significa un entero negativo al principio (es decir^-\d+) o dígitos (es decir\d+) o un número que no sea un dígito (\D).
Manifestación:
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());
}
}
}
Salida:
-122
+
2
?
s
a
b