我们正在从数据库中获取属性(我们无法影响),并希望通过键/值映射来访问它们。我们面临的问题是其中一个属性键包含空白字符。
foo bar = barefoot
这 - 正确 - 解释如下
key: foo
value: bar = barefoot
有没有办法在键中包含空格,这样它就不会被解释为分隔符?我想这种行为就像预期的那样,但我想我可以在这里尝试一下。
我们正在从数据库中获取属性(我们无法影响),并希望通过键/值映射来访问它们。我们面临的问题是其中一个属性键包含空白字符。
foo bar = barefoot
这 - 正确 - 解释如下
key: foo
value: bar = barefoot
有没有办法在键中包含空格,这样它就不会被解释为分隔符?我想这种行为就像预期的那样,但我想我可以在这里尝试一下。
您可以使用 Java Unicode 转义属性文件中的所有内容:
\u003d
为了=
\u0020
对于空格例如:
foo bar = barefoot
一定是:
foo\u0020bar\u0020=\u0020barefoot
所以将是:
key: "foo bar "
value: " barefoot"
也许你可以逃避空格:foo\ bar = barefoot
编辑:糟糕,我没有看到您不能更改属性。
看起来分隔符应该是=
,而不是空格。因此 -keyValuePair.split("=")
应该这样做。
如果您从 java.properties
文件中加载它,那么您可以扩展java.util.Properties
和覆盖此方法
public synchronized void load(InputStream inStream) throws IOException
以便它正确解析属性。
我假设“属性”是指 Java 属性文件(由 写入/读取java.util.Properties
)。
然后,当你写自己的时候,
foo bar = barefoot
确实必须解释为
key: foo
value: bar = barefoot
没有办法使用内置Properties
类来配置它。您必须操作输入(转义空格,将其更改为 _ 并返回...),或编写自己的解析器。编写自己的解析器可能会更好,因为很明显,您的输入并不是真正的 Java 属性文件:-)。
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") +
keyValuePair.substring(indexOf("="));