Как экранировать знак равенства в файлах свойств - PullRequest
74 голосов
/ 09 марта 2010

Как я могу избежать знака равенства (=) в файлах свойств Java? Я хотел бы поместить в файл следующее:

table.whereclause=where id=100

Ответы [ 8 ]

76 голосов
/ 09 марта 2010

Более того, пожалуйста, обратитесь к load (Reader reader) метод из Property класса на javadoc

В load(Reader reader) документации по методу написано

Ключ содержит все символы в строке, начинающиеся с первого непробельного символа и вплоть до, но не включая, первый неэкранированный '=', ':' или символ пробела, отличный оттерминатор строки.Все эти ключевые символы завершения могут быть включены в ключ, экранируя их предшествующим символом обратной косой черты;например,

\:\=

будет двухбуквенным ключом ":=". Символы конца строки могут быть включены с использованием escape-последовательностей \r и \n.Любые пробелы после пропуска ключа;если первый непробельный символ после клавиши - '=' или ':', то он игнорируется, и любые пробельные символы после него также пропускаются.Все оставшиеся символы в строке становятся частью строки связанного элемента;если оставшихся символов нет, элементом является пустая строка "".Как только необработанные последовательности символов, составляющие ключ и элемент, идентифицированы, выполняется escape-обработка, как описано выше.

Надеюсь, что это поможет.

73 голосов
/ 15 июля 2013

В вашем конкретном примере вам не нужно избегать равных - вам нужно избегать его, только если он является частью ключа. Формат файла свойств будет обрабатывать все символы после первого неэкранированного равенства как часть значения.

20 голосов
/ 09 марта 2010

Экранирующим символом по умолчанию в Java является '\'.
Однако файл свойств Java имеет формат ключ = значение, он должен учитывать все после первого, равного значению.

14 голосов
/ 12 августа 2013

Лучший способ избежать подобных проблем - создавать свойства программно, а затем сохранять их. Например, используя такой код:

java.util.Properties props = new java.util.Properties();
props.setProperty("table.whereclause", "where id=100");
props.store(System.out, null);

Это выведет в System.out правильно экранированную версию.

В моем случае вывод был:

#Mon Aug 12 13:50:56 EEST 2013
table.whereclause=where id\=100

Как видите, это простой способ генерировать содержимое файлов .properties, которое гарантированно будет правильным. И вы можете поставить столько свойств, сколько захотите.

5 голосов
/ 19 ноября 2015

В моем случае два ведущих '\\' работают нормально для меня.

Например: если ваше слово содержит символ «#» (например, aa # 100, вы можете выйти из него двумя ведущий '\\'

   key= aa\\#100
2 голосов
/ 14 июня 2012

Вы можете посмотреть здесь Может ли ключ в свойстве Java содержать пустой символ?

для escape-символа '=' \ u003d

table.whereclause = где id = 100

ключ: [table.whereclause] значение: [где id = 100]

table.whereclause \ u003dwhere id = 100

ключ: [table.whereclause = где] значение: [id = 100]

table.whereclause \ u003dwhere \ u0020id \ u003d100

ключ: [table.whereclause = где id = 100] значение: []

0 голосов
/ 18 июня 2019

В Spring или Spring загрузочный файл application.properties здесь позволяет экранировать специальные символы;

table.whereclause = где id '\ =' 100

0 голосов
/ 27 января 2016

Я смог ввести значения внутри символа ":

db_user="postgresql"
db_passwd="this,is,my,password"
...