Peut-clé dans une propriété Java inclure un caractère vide?
-
22-09-2019 - |
Question
Nous obtenons des propriétés (que nous ne pouvons pas influencer) sur une base de données et que vous souhaitez y accéder par une cartographie clé / valeur. Nous sommes confrontés au problème que l'une des clés de propriété comprend un caractère blanc.
foo bar = barefoot
est - à juste titre - interprété comme suit
key: foo
value: bar = barefoot
Y at-il un moyen d'inclure l'ébauche dans la clé pour que ce n'est pas interprété comme séparateur? Je suppose que ce comportement est comme prévu, mais je pensais que je pouvais essayer ici.
La solution
Comme il semble devrait être =
le délimiteur, pas d'espace.
Par conséquent -. keyValuePair.split("=")
devrait faire
Si vous chargez ce fichier à partir d'un .properties
java, vous pouvez étendre java.util.Properties
et remplacer cette méthode
public synchronized void load(InputStream inStream) throws IOException
pour que les propriétés parse correctement.
Autres conseils
Vous pouvez échapper à tout dans le fichier de propriétés avec Java Unicode:
-
\u003d
pour=
-
\u0020
pour les espaces
Par exemple:
foo bar = barefoot
doit être:
foo\u0020bar\u0020=\u0020barefoot
sera:
key: "foo bar "
value: " barefoot"
Peut-être que vous pouvez échapper aux espaces blancs: foo\ bar = barefoot
Edit:. Oops, je ne vois pas que vous ne pouvez pas modifier les propriétés
Je suppose que par "propriétés", vous voulez dire un fichier de propriétés Java (comme écrit / lu par java.util.Properties
).
Alors, comme vous écrivez,
foo bar = barefoot
doit en effet être interprété comme
key: foo
value: bar = barefoot
Il n'y a aucun moyen de configurer cette aide de la classe Properties
intégré. Vous devez soit manipuler votre entrée (escape les espaces blancs, changer à _ et le dos ...), ou écrire votre propre analyseur. La rédaction de votre propre analyseur est probablement mieux, car évidemment votre entrée est pas vraiment un fichier de propriétés Java pour commencer: -.)
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));