A chave em uma propriedade Java pode incluir um personagem em branco?
-
22-09-2019 - |
Pergunta
Estamos obtendo propriedades (que não podemos influenciar) de um banco de dados e queremos acessá -las por um mapeamento de chave/valor. Estamos enfrentando o problema de que uma das teclas da propriedade inclui um caractere em branco.
foo bar = barefoot
Isso é - corretamente - interpretado da seguinte maneira
key: foo
value: bar = barefoot
Existe uma maneira de incluir o espaço em branco na chave para que ela não seja interpretada como o delimitador? Acho que esse comportamento é como pretendido, mas pensei em tentar aqui.
Solução
Como parece que o delimitador deve ser =
, não espaço. Por isso - keyValuePair.split("=")
deveria fazer.
Se você está carregando isso de um java .properties
arquivo, então você pode estender java.util.Properties
e substituir este método
public synchronized void load(InputStream inStream) throws IOException
para que ele analise as propriedades corretamente.
Outras dicas
Você pode escapar de tudo no arquivo de propriedades com Java Unicode:
\u003d
por=
\u0020
para espaço em branco
Por exemplo:
foo bar = barefoot
devemos ser:
foo\u0020bar\u0020=\u0020barefoot
Então será:
key: "foo bar "
value: " barefoot"
Talvez você possa escapar dos espaços em branco: foo\ bar = barefoot
EDIT: OOPS, não vi que você não pode alterar as propriedades.
Presumo que por "propriedades", você quer dizer um arquivo de propriedade Java (conforme escrito/lido por java.util.Properties
).
Então, enquanto você se escreve,
foo bar = barefoot
deve realmente ser interpretado como
key: foo
value: bar = barefoot
Não há como configurar isso usando o embutido Properties
classe. Você deve manipular sua entrada (escape do espaço em branco, altere -o para _ e de volta ...) ou escreva seu próprio analisador. Escrever seu próprio analisador provavelmente é melhor, pois obviamente sua entrada não é realmente um arquivo de propriedades Java para começar :-).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));