gostaria de separa os numeros dos sinais matemáticos ex:
quanto é 2+2
fica
quanto é 2 + 2
alguem pode me ajudar com um código prático para isso?
gostaria de separa os numeros dos sinais matemáticos ex:
quanto é 2+2
fica
quanto é 2 + 2
alguem pode me ajudar com um código prático para isso?
Talvez as classes Pattern e Matcher possam te ajudar.
Crie uma expressão regular capaz de reconhecer uma sequencia de sinal matemático (+,-,*,etc) e número, ou uma sequencia de número e sinal matemático.
Utilize métodos dessas duas classes para encontrar as posições em que tais expressões são reconhecidas, e adicione o espaço oportunamente.
realmente eu já estudei sobre isso. é que não tenho a maturidade de conhecimento para criar algo assim… rs rs rs
se puder me ajudar com o código agradeço
Veja este pequeno exemplo:
public class Main {
static String fonte = "2+2";
public static void main(String[] args) {
Pattern pattern= Pattern.compile("((\\+\\d)|(\\d\\+))");
Matcher matcher = pattern.matcher("2+2");
while (matcher.find()){
StringBuilder aux = new StringBuilder(fonte);
aux.insert(matcher.start() + 1, " ");
fonte = aux.toString();
}
System.out.println (fonte);
}
}
Neste caso criei uma expressão regular que reconhece a sequencia de um sinal de + seguido por um digito, ou então um digito seguido por um sinal de mais. Você pode facilmente estender para que a expressão reconheça todos os simbolos que necessita.
Este exemplo tem um pequeno problema:
O método find encontra o primeiro match em 2+. Adiciona um espaço logo depois do sinal +. E termina. Ele não encontra o match +2 pois o caractere + ja foi usado no primeiro match, então ele não é mais considerado. A inserção do espaço também está provavelmente equivocada. Pode ser que seja interessante você inserir o espaço antes do match…e não depois… Mas minha intenção foi te dar uma ideia de como usar essas classes.
Tenta dar uma mexida nisso e veja se te serve. Até.
Tenta isso, q resolve…
System.out.println("2+2".replaceAll("(\\d+) *([*/+-]) *(\\d+)", "$1 $2 $3"));
só q vc vai precisar ajustar o padrão p/ contas mais complexas…
[quote=barenko]Tenta isso, q resolve…
System.out.println("2+2".replaceAll("(\\d+) *([*/+-]) *(\\d+)", "$1 $2 $3"));
só q vc vai precisar ajustar o padrão p/ contas mais complexas…[/quote]
Resolve casos básicos. Onde se sabe de antemão o número de parâmetros. Já não resolve, por exemplo, "“2+2+2”. E se forem n números separados por n-1 simbolos? Como é que fica a parte “$1 $2 $3” ?
[quote=rod.attack]
Resolve casos básicos. Onde se sabe de antemão o número de parâmetros. Já não resolve, por exemplo, "“2+2+2”. E se forem n números separados por n-1 simbolos? Como é que fica a parte “$1 $2 $3” ?[/quote]
ok, então, basta usar isso:
System.out.println("2+2+45".replaceAll(" *([+-/*]) *", " $1 "));
[quote=barenko][quote=rod.attack]
Resolve casos básicos. Onde se sabe de antemão o número de parâmetros. Já não resolve, por exemplo, "“2+2+2”. E se forem n números separados por n-1 simbolos? Como é que fica a parte “$1 $2 $3” ?[/quote]
ok, então, basta usar isso:
System.out.println("2+2+45".replaceAll(" *([+-/*]) *", " $1 "));
Legal. Esse primeiro * está funcionando como exatamente? Não peguei bem a ideia dessa ER.
Legal pessoal. Show de bola.
[quote=rod.attack]
Legal. Esse primeiro * está funcionando como exatamente? Não peguei bem a ideia dessa ER.[/quote]
é para ignorar N espaços em branco antes do sinal… funciona igual ao terceiro *.
os exemplos acima são excelentes, mas vou explicar melhor: estou trabalhando com processamento de linguagem natural, um robo virtual que processa perguntas, porém ele processa token por token sendo assim isto é um toke só “2+2” e isto são três tokens “2 + 2”. Oks.
Valew galera.