Строка соответствия после новой строки

1

В Java у меня есть эта строка:

uk\learningAid\UserInputs\UserClass.java:16: error: cannot find symbol
player.mvRight(3);

Я использую это регулярное выражение для соответствия 16 и cannot find symbol:

Pattern pattern = Pattern.compile(":(\\d+):\\serror:\\s(.*)");

Однако я хочу также player.mvRight(3); который находится на новой линии. Как мне это сделать?

Я попытался добавить этот \\n(.*) В конец reex, но он ничего не смог сопоставить.

Теги:
newline

2 ответа

0

Чтобы совместить в том числе новую строку до первой ";".

Pattern pattern = Pattern.compile(":(\\d)+:\\serror:\\s(.*)\\n(.*);");
  • 1
    Следует отметить, что использование \s , вероятно, является плохой идеей в приведенном выше примере, так как это будет соответствовать любому символу пробела, а не только обычным пробелам. Учитывая ввод, это будет иметь больше смысла вместо этого:: :(\\d)+: error: (.*)\\n(.*);
  • 0
    Шаблон, который я использовал, только что добавлен поверх шаблона, который использовал автор. В противном случае, ваша альтернатива должна делать то же самое по указанным причинам.
0

В соответствии с вашими комментариями, если это необязательно должно быть регулярным выражением, тогда методы String такие как substring() и indexof() могут использоваться для получения позиции определенных символов и использовать их как маркеры для любых строк с определенным шаблоном, Ниже SSCCE должен работать для вашей String и любого подобного формата.

public  class Test {

    public static void main(String[] args) {
        String toProcess = "uk\\learningAid\\UserInputs\\UserClass.java:16: error: cannot find symbol \nplayer.mvRight(3);";
        int firstCol = toProcess.indexOf(":");
        int secondCol = toProcess.indexOf(":", firstCol+1);
        int lastCol = toProcess.lastIndexOf(":");
        System.out.println(toProcess.substring(firstCol+1, secondCol) + toProcess.substring(lastCol+1));
    }
}

Вывод:

16 cannot find symbol 
player.mvRight(3);

Кроме того, если вы хотите удалить разрыв строки, вы можете просто вызвать toProcess = toProcess.replaceAll("\n", ""); в начале удалить разрывы строк.

Ещё вопросы

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