Java属性中的键是否可以包含空白字符?

bl4*_*0l7 37 java properties key-value

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

foo bar = barefoot
Run Code Online (Sandbox Code Playgroud)

这是 - 正确 - 解释如下

key: foo
value: bar = barefoot
Run Code Online (Sandbox Code Playgroud)

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

小智 147

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

  • \u003d 对于 =
  • \u0020 对于空白

例如:

foo bar = barefoot
Run Code Online (Sandbox Code Playgroud)

一定是:

foo\u0020bar\u0020=\u0020barefoot
Run Code Online (Sandbox Code Playgroud)

所以将是:

key: "foo bar "
value: " barefoot"
Run Code Online (Sandbox Code Playgroud)

  • 这是"正确"的答案.所有其他选项最终都将采用非标准解决方案.请用这个答案:) (10认同)

Pet*_*hev 15

也许你可以逃脱这些空白: foo\ bar = barefoot

编辑:哎呀,我没有看到你无法改变属性.

  • 不管怎么说:http://pastie.org/787892制作http://pastie.org/787893 (2认同)

Boz*_*zho 10

因为它似乎应该是分界符=,而不是空格.因此 - keyValuePair.split("=")应该这样做.

如果从java .properties文件加载它,则可以扩展java.util.Properties并覆盖此方法

public synchronized void load(InputStream inStream) throws IOException
Run Code Online (Sandbox Code Playgroud)

这样它就可以正确地解析属性.

  • [来自文档](http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#load-java.io.Reader-):“**密钥包含**行中从第一个非空白字符开始的所有字符,以及**直到(但不包括)第一个未转义的“=”、“:”或空白字符**(行终止符除外)。” 所以空格被记录为分隔符,所以我不明白你的说法“分隔符应该是`=`,而不是空格。”。规范说空格是有效的分隔符,那么为什么“应该”它是`=`? (3认同)
  • 嗯,"属性"中的重写方法充其量只是dubios.Properties类中可能存在许多硬编码假设,因此它是未来错误的来源.如果它不是一个合适的属性文件,我宁愿不使用属性来读取它. (2认同)