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í.

¿Fue útil?

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("="));  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top