Может ли ключ в собственности Java включить пустой символ?
-
22-09-2019 - |
Вопрос
Мы получаем свойства (на которые мы не можем влиять) из базы данных и хотим получить доступ к ним с помощью картирования ключей/значения. Мы сталкиваемся с проблемой, что один из ключей собственности включает в себя пустой символ.
foo bar = barefoot
Это - правильно - интерпретируется следующим образом
key: foo
value: bar = barefoot
Есть ли способ включить пробел в ключ, чтобы он не интерпретировался как разделитель? Я полагаю, что это поведение похоже на предполагаемое, но я подумал, что смогу попробовать здесь.
Решение
Как кажется, разделитель должен быть =
, не пространство. Следовательно - keyValuePair.split("=")
стоит сделать.
Если вы загружаете это с Java .properties
Файл, тогда вы можете расширить java.util.Properties
и переопределить этот метод
public synchronized void load(InputStream inStream) throws IOException
так что он разбирается правильно.
Другие советы
Вы можете избежать все в файле свойств с Java Unicode:
\u003d
за=
\u0020
для пробела
Например:
foo bar = barefoot
должно быть:
foo\u0020bar\u0020=\u0020barefoot
Так будет:
key: "foo bar "
value: " barefoot"
Может, вы сможете избежать пробелов: foo\ bar = barefoot
РЕДАКТИРОВАТЬ: Ой, я не видел, что вы не можете изменить свойства.
Я предполагаю, что под «свойствами» вы имеете в виду файл свойств Java (как написано/прочитано java.util.Properties
).
Тогда, когда вы пишете сами,
foo bar = barefoot
действительно должен быть истолкован как
key: foo
value: bar = barefoot
Нет возможности настроить это с помощью встроенного Properties
учебный класс. Вы должны либо манипулировать своим вводом (избежать пробела, изменить его на _ и обратно ...), либо написать свой собственный анализатор. Написание собственного анализатора, вероятно, лучше, так как, очевидно, ваш вклад на самом деле не является файлом свойств Java для начала с :-).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));