¿Puede la llave en una propiedad Java incluir un carácter en blanco?
-
22-09-2019 - |
Pregunta
Estamos recibiendo propiedades (que no podemos influir) de una base de datos y queremos acceder a ellos mediante una asignación de clave / valor. Nos encontramos ante el problema de que una de las claves de propiedad incluye un carácter en blanco.
foo bar = barefoot
Esto es - correctamente - interpretarse de la siguiente
key: foo
value: bar = barefoot
¿Hay una manera de incluir el espacio en blanco en la clave por lo que no es interpretada como el delimitador? Creo que este comportamiento es como previsto, pero pensé que podría darle una oportunidad aquí.
Solución
Como parece el delimitador debe ser =
, no en el espacio.
Por lo tanto -. keyValuePair.split("=")
debe hacer
Si va a cargar esto desde un archivo java .properties
, entonces se puede extender java.util.Properties
y reemplazar este método
public synchronized void load(InputStream inStream) throws IOException
para que analiza las propiedades correctamente.
Otros consejos
Se puede escapar de todas las cosas en el archivo de propiedades con Java Unicode:
-
\u003d
para=
-
\u0020
de espacios en blanco
Por ejemplo:
foo bar = barefoot
debe ser:
foo\u0020bar\u0020=\u0020barefoot
Así será:
key: "foo bar "
value: " barefoot"
Tal vez usted puede escapar de los espacios en blanco: foo\ bar = barefoot
Editar:. Vaya, no he visto que no se puede cambiar las propiedades
Asumo por "propiedades", que quiere decir un archivo de propiedades Java (como está escrito / leído por java.util.Properties
).
A continuación, como se escribe a sí mismo,
foo bar = barefoot
de hecho, debe interpretarse en
key: foo
value: bar = barefoot
No hay manera de configurar esto usando la clase Properties
incorporado. Debe manipular ya sea en su entrada (escapar del espacio en blanco, cambiarlo a _ y la espalda ...), 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: -).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));