Può la chiave in una proprietà Java includere un carattere vuoto?
-
22-09-2019 - |
Domanda
Stiamo ricevendo proprietà (che non possiamo influenzare) da un database e vogliamo accedervi da una mappatura chiave / valore. Ci troviamo di fronte al problema che una delle chiavi di proprietà include un carattere vuoto.
foo bar = barefoot
Questa è - giustamente - interpretati come segue
key: foo
value: bar = barefoot
C'è un modo per includere il vuoto nella chiave in modo che non è interpretato come delimitatore? Credo che questo comportamento è proprio come previsto, ma ho pensato che avrei potuto fare un tentativo qui.
Soluzione
A quanto pare il delimitatore deve essere =
, non lo spazio.
Quindi -. keyValuePair.split("=")
dovrebbe fare
Se si sta caricando questo da un file java .properties
, allora è possibile estendere java.util.Properties
e ignorare questo metodo
public synchronized void load(InputStream inStream) throws IOException
in modo che analizza le proprietà in modo corretto.
Altri suggerimenti
È possibile sfuggire ogni cosa in file di proprietà con Java Unicode:
-
\u003d
per=
-
\u0020
per spazi
Ad esempio:
foo bar = barefoot
deve essere:
foo\u0020bar\u0020=\u0020barefoot
Così sarà:
key: "foo bar "
value: " barefoot"
Forse si può sfuggire alle spaziature: foo\ bar = barefoot
Modifica:. Ops, non ho visto che non è possibile modificare le proprietà
Presumo dalla "proprietà", si intende un file di proprietà Java (come scritto / letto da java.util.Properties
).
Quindi, come si scrive da soli,
foo bar = barefoot
deve infatti essere interpretato come
key: foo
value: bar = barefoot
Non c'è alcun modo per configurare questo utilizzando la classe Properties
built-in. È necessario sia manipolare il vostro ingresso (fuga gli spazi bianchi, modificarlo a _ e ritorno ...), o scrivere il proprio parser. Scrivere un proprio parser è probabilmente meglio, come, ovviamente, il vostro ingresso non è davvero un file di proprietà Java per cominciare: -).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));