Я могу заменить группы в Java regex?

Сначала сохраните свойства по умолчанию в вашем файле свойств, который упакован в банку. Когда приложение запускается, попробуйте прочитать файл свойств с тем же именем из некоторого местоположения по умолчанию в файловой системе, предпочтительнее домашняя папка пользователя, которую вы можете получить с помощью System.getProperty("user.home");. Если файл существует в файловой системе, загрузите его, если он не существует, загрузите упакованный файл свойств и запишите копию в файловую систему.

Таким образом, если имя вашего файла свойств - myprops.properties, изначально его будет содержать только ваш jar-файл. Когда приложение запускается, оно проверит, существует ли файл /home/xyz/myprops.properties. Поскольку это не так, он будет читать файл упакованных свойств и записывать копию в файл /home/xyz/myprops.properties. Со следующего раза он будет читать из /home/xyz/myprops.properties.

87
задан ekad 21 November 2017 в 06:45
поделиться

3 ответа

Используйте $ n (где n - цифра) для ссылки на захваченные подпоследовательности в replaceFirst (...) . Я предполагаю, что вы хотели заменить первую группу буквальной строкой «число» , а вторую группу - значением первой группы.

Pattern p = Pattern.compile("(\\d)(.*)(\\d)");
String input = "6 example input 4";
Matcher m = p.matcher(input);
if (m.find()) {
    // replace first number with "number" and second number with the first
    String output = m.replaceFirst("number $3$1");  // number 46
}

Рассмотрим (\ D +) для второй группы вместо (. *) . * - это жадный сопоставитель, который сначала использует последнюю цифру. Затем сопоставителю придется вернуться назад, когда он поймет, что заключительный (\ d) не имеет ничего для сопоставления, прежде чем он сможет сопоставить с последней цифрой.

115
ответ дан 24 November 2019 в 07:45
поделиться

Добавьте третью группу, добавив скобки вокруг . * , затем замените подпоследовательность на "число" + m.group (2) + "1" . например:

String output = m.replaceFirst("number" + m.group(2) + "1");
9
ответ дан 24 November 2019 в 07:45
поделиться

Вы можете использовать методы matcher.start() и matcher.end() для получения позиций групп. Таким образом, используя эти позиции, вы можете легко заменить любой текст.

1
ответ дан 24 November 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: