Como usar o Pattern, Matcher na API Java regex para remover uma linha específica
Oct 19 2020
Eu tenho uma divisão de string complicada, preciso remover os comentários , espaços e manter todos os números, mas transformar todas as strings em caracteres . Se o -sinal estiver no início e for seguido por um número, trate-o como um número negativo em vez de um operador
o comentário tem o estilo de ?<space>comments<space>?(os comentários são um marcador de posição)
Entrada :
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
resultado :
["-122","+","2","?","s","a","b"]
(toda a string em caracteres e sem espaço, sem comentários)
Respostas
2 ArvindKumarAvinash Oct 19 2020 at 05:41
- Substitua a corda indesejada
\s*\?\s*\w+\s*(?=\?)por"". Você pode acorrentarString#replaceAllpara remover qualquer espaço em branco restante. Observe que?=significa lookahead positivo e aqui significa\s*\?\s*\w+\s*seguido por um?. Espero que você já saiba que\sespecifica espaços em branco e\wespecifica um caractere de palavra. - Em seguida, você pode usar o regex, o
^-\d+|\d+|\Dque significa um inteiro negativo no início (ou seja^-\d+) ou dígitos (ou seja\d+) ou um não-dígito (\D).
Demo:
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());
}
}
}
Resultado:
-122
+
2
?
s
a
b
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas