Java 如何在属性文件中转义等号
如何在Java属性文件中转义等号(Java 如何在属性文件中转义等号,java,properties,escaping,Java,Properties,Escaping,如何在Java属性文件中转义等号(=)?我想在我的文件中添加以下内容: table.whereclause=where id=100 Java中的默认转义字符是“\” 但是,Java属性文件的格式为key=value,它应该考虑第一个之后的所有内容都等于value。此外,请参阅 在加载(读卡器)方法文档中 该键包含所有字符 从第一个开始排队 非空白字符,最多为, 但不包括第一个未被替换的 “=”,:”,或空白字符 而不是线路终止符。全部 这些关键终止字符可以 通过转义包含在密钥中 在前面加上一
=
)?我想在我的文件中添加以下内容:
table.whereclause=where id=100
Java中的默认转义字符是“\”
但是,Java属性文件的格式为key=value,它应该考虑第一个之后的所有内容都等于value。
此外,请参阅 在
加载(读卡器)
方法文档中
该键包含所有字符
从第一个开始排队
非空白字符,最多为,
但不包括第一个未被替换的
“=”
,:”
,或空白字符
而不是线路终止符。全部
这些关键终止字符可以
通过转义包含在密钥中
在前面加上一个反斜杠
性格比如说,
\:\=
将是两个字符的键“:=”
行结束符字符可以是
包括使用\r
和\n
转义
序列。后面有空格吗
键被跳过;如果第一个非白色
键后的空格字符为'='
或:'
,则忽略它,并且
后面的空白字符是
也跳过了。所有剩余字符
在线成为网络的一部分
关联元素字符串;如果有
如果没有剩余字符,则
元素是空字符串“”
。一旦
原始字符序列
构成要素的关键是
已识别,转义处理正在进行
如上所述执行
希望有帮助。你可以看看这里
对于转义等于“=”\u003d
表.whereclause=其中id=100
key:[table.whereclause]值:[其中id=100]
表.whereclause\u003dwhere id=100
key:[table.whereclause=where]值:[id=100]
表.whereclause\u003dwhere\u0020id\u003d100
key:[table.whereclause=where id=100]value:[]在您的特定示例中,您不需要转义等号,只要它是键的一部分,您就需要转义它。属性文件格式将把第一个unscaped equals后面的所有字符视为值的一部分。避免此类问题的最佳方法是以编程方式构建属性,然后存储它们。例如,使用如下代码:
java.util.Properties props = new java.util.Properties();
props.setProperty("table.whereclause", "where id=100");
props.store(System.out, null);
final String escapedPath = escapePropertyValue("C:\\Users\\X");
writeToFile(escapedPath); // will pass "C\\:\\\\Users\\\\X"
这会将正确转义的版本输出到System.out
在我的例子中,输出是:
#Mon Aug 12 13:50:56 EEST 2013
table.whereclause=where id\=100
正如您所看到的,这是一种生成.properties文件内容的简单方法,可以保证其正确性。您可以放置任意数量的属性。在我的例子中,两个前导的“\\”对我来说效果很好 例如: 如果您的单词包含“#”字符(例如aa#100),则可以使用两个字符将其转义 前导'\\'
key=aa\\\#100
我已经能够在字符中输入值了:
在Spring或Spring boot application.properties文件中,这里是转义特殊字符的方法
table.whereclause=where id'\='100此方法应有助于以编程方式生成保证与
文件100%兼容的值。属性
文件:
public static String escapePropertyValue(final String value) {
if (value == null) {
return null;
}
try (final StringWriter writer = new StringWriter()) {
final Properties properties = new Properties();
properties.put("escaped", value);
properties.store(writer, null);
writer.flush();
final String stringifiedProperties = writer.toString();
final Pattern pattern = Pattern.compile("(.*?)escaped=(.*?)" + Pattern.quote(System.lineSeparator()) + "*");
final Matcher matcher = pattern.matcher(stringifiedProperties);
if (matcher.find() && matcher.groupCount() <= 2) {
return matcher.group(matcher.groupCount());
}
// This should never happen unless the internal implementation of Properties::store changed
throw new IllegalStateException("Could not escape property value");
} catch (final IOException ex) {
// This should never happen. IOException is only because the interface demands it
throw new IllegalStateException("Could not escape property value", ex);
}
}
这种方法有点贵,但无论如何,将属性写入文件通常是一种零星的操作。除了前导空格(哦,键和值之间的“=”不是必需的,它可以是:或空白)不知道为什么没有标记!最简单的答案是正确的!大多数情况下,人们都在属性文件中寻找转义值!小更正:将第一个未转义的等号和尾随空格之后的所有字符视为值,即去掉值中的前导空格。例如“myKey=my value”“与“myKey=my value”相同。我认为,您需要两个反斜杠(glassfish 4.1,build 13)为什么要进行向下投票?这是一个真实的答案:)Op说Java属性,引号在Java属性文件中不起作用。
final String escapedPath = escapePropertyValue("C:\\Users\\X");
writeToFile(escapedPath); // will pass "C\\:\\\\Users\\\\X"