Can the key in a Java property include a blank character?
-
22-09-2019 - |
Question
We are getting properties (that we can not influence) out of a database and want to access them by a key/value mapping. We are facing the problem that one of the property keys includes a blank character.
foo bar = barefoot
This is - correctly - interpreted as follows
key: foo
value: bar = barefoot
Is there a way to include the blank in the key so that it's not interpreted as the delimiter? I guess this behaviour is just like intended, but I thought I could give it a try here.
Solution
As it seems the delimiter should be =
, not space.
Hence - keyValuePair.split("=")
should do.
If you are loading this from a java .properties
file, then you can extend java.util.Properties
and override this method
public synchronized void load(InputStream inStream) throws IOException
so that it parses the properties correctly.
OTHER TIPS
You can escape every thing in properties file with Java Unicode:
\u003d
for=
\u0020
for whitespace
For example:
foo bar = barefoot
must be:
foo\u0020bar\u0020=\u0020barefoot
So will be:
key: "foo bar "
value: " barefoot"
Maybe you can escape the whitespaces: foo\ bar = barefoot
Edit: Oops, I did not see that you can't change the properties.
I assume by "properties", you mean a Java property file (as written/read by java.util.Properties
).
Then, as you write yourself,
foo bar = barefoot
must indeed be interpreted as
key: foo
value: bar = barefoot
There's no way to configure this using the built-in Properties
class. You must either manipulate your input (escape the whitespace, change it to _ and back...), or write your own parser. Writing your own parser is probably better, as obviously your input isn't really a Java properties file to begin with :-).
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));