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.

Foi útil?

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("="));  
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top