44

我们正在从数据库中获取属性(我们无法影响),并希望通过键/值映射来访问它们。我们面临的问题是其中一个属性键包含空白字符。

foo bar = barefoot

这 - 正确 - 解释如下

key: foo
value: bar = barefoot

有没有办法在键中包含空格,这样它就不会被解释为分隔符?我想这种行为就像预期的那样,但我想我可以在这里尝试一下。

4

5 回答 5

166

您可以使用 Java Unicode 转义属性文件中的所有内容:

  • \u003d为了=
  • \u0020对于空格

例如:

foo bar = barefoot

一定是:

foo\u0020bar\u0020=\u0020barefoot

所以将是:

key: "foo bar "
value: " barefoot"
于 2012-06-14T10:36:57.183 回答
15

也许你可以逃避空格:foo\ bar = barefoot

编辑:糟糕,我没有看到您不能更改属性。

于 2010-01-21T09:34:05.727 回答
11

看起来分隔符应该是=,而不是空格。因此 -keyValuePair.split("=")应该这样做。

如果您从 java.properties文件中加载它,那么您可以扩展java.util.Properties和覆盖此方法

public synchronized void load(InputStream inStream) throws IOException

以便它正确解析属性。

于 2010-01-21T09:38:38.650 回答
4

我假设“属性”是指 Java 属性文件(由 写入/读取java.util.Properties)。

然后,当你写自己的时候,

foo bar = barefoot

确实必须解释为

key: foo
value: bar = barefoot

没有办法使用内置Properties类来配置它。您必须操作输入(转义空格,将其更改为 _ 并返回...),或编写自己的解析器。编写自己的解析器可能会更好,因为很明显,您的输入并不是真正的 Java 属性文件:-)。

于 2010-01-21T09:37:34.557 回答
-1
keyValuePair = keyValuePair.substring(0,indexOf("=")).replaceAll("\\s+") + 
               keyValuePair.substring(indexOf("="));  
于 2013-08-24T15:53:32.503 回答