Сначала сохраните свойства по умолчанию в вашем файле свойств, который упакован в банку. Когда приложение запускается, попробуйте прочитать файл свойств с тем же именем из некоторого местоположения по умолчанию в файловой системе, предпочтительнее домашняя папка пользователя, которую вы можете получить с помощью System.getProperty("user.home");
. Если файл существует в файловой системе, загрузите его, если он не существует, загрузите упакованный файл свойств и запишите копию в файловую систему.
Таким образом, если имя вашего файла свойств - myprops.properties
, изначально его будет содержать только ваш jar-файл. Когда приложение запускается, оно проверит, существует ли файл /home/xyz/myprops.properties
. Поскольку это не так, он будет читать файл упакованных свойств и записывать копию в файл /home/xyz/myprops.properties
. Со следующего раза он будет читать из /home/xyz/myprops.properties
.
Используйте $ 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)
не имеет ничего для сопоставления, прежде чем он сможет сопоставить с последней цифрой.
Добавьте третью группу, добавив скобки вокруг . *
, затем замените подпоследовательность на "число" + m.group (2) + "1"
. например:
String output = m.replaceFirst("number" + m.group(2) + "1");
Вы можете использовать методы matcher.start() и matcher.end() для получения позиций групп. Таким образом, используя эти позиции, вы можете легко заменить любой текст.