Java matcher возвращает дополнительные «.» В выводе

1

Это моя часть java-программы для проекта.

String ops="";
String input="1+3-4+(7/8)+cos(sin(50)+2)/2+tan(90)*e^(5+26-4/1*2)";
input=input.replaceAll("cos", "c").replaceAll("sin", "s").replaceAll("tan", "t").replace("e", "2.718");
//System.out.println(input);
Pattern pattern=Pattern.compile("[+-/*()cst^]");
Matcher matcher= pattern.matcher(input);
while (matcher.find()) {ops+=matcher.group();}
System.out.println(ops);

Здесь я просто читаю входные данные и выдаю в них данные +, -,/, *, (,), c, s & t. Вывод ops должен возвращать +-+(/)+c(s()+)/+t()*^(+-/*) пока он возвращает +-+(/)+c(s()+)/+t()*.^(+-/*) Помогите мне понять причину, пожалуйста.

  • 0
    С первого взгляда это выглядит как результат подстановки «2.718» для «е», по крайней мере, именно здесь «.» идет от.
  • 0
    Я знаю это, но мой шаблон не имеет этого
Теги:

1 ответ

4
Лучший ответ

- используется для диапазона, поэтому +-/ содержит все символы между + и / (в таблице ascii), т.е. ,-./. Для того, чтобы решить эту проблему можно поместить - в первой позиции:

Pattern.compile("[-+/*()cst^]");

Или вы также можете избежать этого. Подробнее об этом: Как сопоставить дефисы с регулярным выражением?

  • 0
    В качестве альтернативы - может быть экранирован `. Obviously in java code `должно быть продублировано, чтобы пропустить java и регулярные выражения.
  • 0
    Так вот причина. Спасибо.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню