您好我正在尝试从Java中的String加载配置,如下所示:
@Test
public void testIllegalCharacter(){
String input = "prop=\\asd";
Config conf = ConfigFactory.parseString(input);
}
上面的代码会产生以下错误:
com.typesafe.config.ConfigException$Parse: String: 1: Expecting a value but got wrong token: '\' (Reserved character '\' is not allowed outside quotes) (if you intended '\' (Reserved character '\' is not allowed outside quotes) to be part of a key or string value, try enclosing the key or value in double quotes, or you may be able to rename the file .properties rather than .conf)
我知道我的字符串中有非法字符。虽然如何找到完整的非法字符集?
如果我(例如)将此String转换为Properties
对象,然后使用ConfigFactory.parseProperties
解析它,我可以看到值"\\asd"
已解析为"asd".
所以那里必须在类型安全的库中进行一些清理,我希望我自己可以称之为排毒,但我看不清楚如何。解析属性不是一个可行的解决方案,因为配置也可以由对象或列表组成。
有没有人有任何建议如何解决这个问题?
或者,有人可以指出所有保留的字符集吗?
非常感谢
答案 0 :(得分:0)
如果我正确理解了错误消息,您应该在引号周围加上特殊字符,例如:像这样:
"prop=\"\\asd\"";
不确定为什么你想要一个带有反斜杠a(' \ a')的属性定义,但我想我不需要知道: - )
答案 1 :(得分:0)
我想我可能找到了答案。我需要设置ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES)
适用于以下测试:
@Test
public void test(){
String input = "prop=C:/MyDocuments/mydir";
Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
assertEquals("C:/MyDocuments/mydir", conf.getAnyRef("prop"));
}
但不适用于使用反斜杠的测试
@Test
public void test(){
String input = "prop=C:\\MyDocuments\\mydir";
Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
assertEquals("C:\\MyDocuments\\mydir", conf.getAnyRef("prop"));
}
失败了:
org.junit.ComparisonFailure:
Expected :C:\MyDocuments\mydir
Actual :C:MyDocumentsmydir
所以我不确定这是明确的答案......