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.

È stato utile?

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("="));  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top