¿Puede la clave en una propiedad Java incluir un carácter en blanco?


Estamos obteniendo propiedades (que no podemos influir) de una base de datos y queremos acceder a ellas mediante una asignación de clave/valor. Nos enfrentamos al problema de que una de las claves de propiedad incluye un carácter en blanco.

foo bar = barefoot

Esto se interpreta - correctamente-como sigue

key: foo
value: bar = barefoot

¿Hay alguna manera de incluir el espacio en blanco en la clave para que no se interprete como el delimitador? Supongo que este comportamiento es justo como se pretende, pero pensé que podría darle una oportunidad aquí.

Author: Jonathan Leffler, 2010-01-21

5 answers

Como parece el delimitador debe ser =, no el espacio. Por lo tanto - keyValuePair.split("=") debe hacer.

Si está cargando esto desde un archivo java .properties, entonces puede extender java.util.Properties y anular este método

public synchronized void load(InputStream inStream) throws IOException

Para que analice las propiedades correctamente.

 11
Author: Bozho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 09:38:38

Puede escapar de todo en el archivo de propiedades con Java Unicode:

  • \u003d para =
  • \u0020 para espacios en blanco

Por ejemplo:

foo bar = barefoot

Debe ser:

foo\u0020bar\u0020=\u0020barefoot

Así será:

key: "foo bar "
value: " barefoot"
 121
Author: Veaceslav Serghienco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-25 15:12:55

Tal vez puedas escapar de los espacios en blanco: foo\ bar = barefoot

Editar: Oops, no vi que no se puede cambiar las propiedades.

 13
Author: Petar Minchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 09:34:05

Asumo que por "propiedades", te refieres a un archivo de propiedades Java (como escrito/leído por java.util.Properties).

Entonces, mientras escribe usted mismo,

foo bar = barefoot

Debe ser interpretado como

key: foo
value: bar = barefoot

No hay forma de configurar esto usando la clase incorporada Properties. Debe manipular su entrada (escape del espacio en blanco, cámbielo a _ y viceversa...), o escribir su propio analizador. Escribir su propio analizador es probablemente mejor, ya que obviamente su entrada no es realmente un archivo de propiedades de Java para empezar :-).

 4
Author: sleske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-25 15:16:12
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") + 
               keyValuePair.substring(indexOf("="));  
 0
Author: yurin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-24 15:53:32