Можно ли передать ссылку в квантификаторе регулярных выражений в Java?

У меня было упражнение по программированию, в котором мы должны были написать метод форматирования, который принимал бы в качестве параметров String в качестве текстового ввода, который мы хотим отформатировать, и целое число в качестве длины строк, которые мы хотим.

У нас также были определенные правила, и одно из них было таким: если слово длиннее желаемой длины, оно должно стоять на строке само по себе.

Таким образом, простой способ сделать это состоял в том, чтобы найти с помощью выражения Regex ряд символов, отличных от пробелов, по крайней мере, длина и, возможно, больше, и заменить это сопоставление на два \n в каждом сторона...

возможно, код более понятен: давайте представим, что наша желаемая длина строки равна 10

  String s = line.replaceAll("([ \t])(\\S{10,})([ \t])", "\n$2\n");
  System.out.println(s);

Это на самом деле работает нормально.

Моя проблема в том, что длина строки должна быть передана в качестве параметра метода форматирования; поэтому единственный способ обратиться к этому параметру — использовать его ссылку. Например:

общедоступный статический формат строки (String s, int length) { ...

// недостающие вещи

String s = line.replaceAll("([ \t])(\S{длина,})([ \t])", "\n$2\n"); System.out.println(s);

Однако в этом случае он вернет ошибку: PatternSyntaxException

Мой вопрос: есть ли способ использовать ссылку в квантификаторе (вместо числа) в качестве аргумента для количества вхождений, которые мы хотим сопоставить? Поскольку кажется, что это было бы действительно полезно, я был удивлен, что это не сработало. Также не похоже, что многие люди столкнулись с этой проблемой.


person Lea    schedule 23.03.2016    source источник


Ответы (1)


попробуй это

String s = line.replaceAll("([ \t])(\S{"+length+",})([ \t])", "\n$2\n");
System.out.println(s);
person Berdimurat Masaliev    schedule 23.03.2016