gpt4 book ai didi

java - 如何将 PropertyResourceBundle 与包含空格的键一起使用

转载 作者:行者123 更新时间:2023-12-01 13:05:06 26 4
gpt4 key购买 nike

我想通过 i18n 的 PropertyResourceBundle 使用属性文件。我当前的问题是我拥有的文件上的键可以包含空格,例如:

key number 1 = value number 1
key2 = value2

因此,当我加载相应的属性文件时,第一个空格将用作键值分隔符,而不是“=”符号。

然后,我的问题是:如何在不修改属性文件的情况下使用带有空格的键(我想避免添加任何斜杠或 unicode 字符代码)?有没有办法覆盖默认属性文件分隔符,以便我可以将“=”设置为唯一要考虑的分隔符?

最佳答案

你必须编写自己的Properties类,jdk中的Properties类将空格视为分隔符,这是它的代码。你会发现,一旦遇到空格,它就会停止键并开始值。

private void load0 (LineReader lr) throws IOException {
char[] convtBuf = new char[1024];
int limit;
int keyLen;
int valueStart;
char c;
boolean hasSep;
boolean precedingBackslash;

while ((limit = lr.readLine()) >= 0) {
c = 0;
keyLen = 0;
valueStart = limit;
hasSep = false;

//System.out.println("line=<" + new String(lineBuf, 0, limit) + ">");
precedingBackslash = false;
while (keyLen < limit) {
c = lr.lineBuf[keyLen];
//need check if escaped.
if ((c == '=' || c == ':') && !precedingBackslash) {
valueStart = keyLen + 1;
hasSep = true;
break;
} else if ((c == ' ' || c == '\t' || c == '\f') && !precedingBackslash) {
valueStart = keyLen + 1;
break;
}
if (c == '\\') {
precedingBackslash = !precedingBackslash;
} else {
precedingBackslash = false;
}
keyLen++;
}
while (valueStart < limit) {
c = lr.lineBuf[valueStart];
if (c != ' ' && c != '\t' && c != '\f') {
if (!hasSep && (c == '=' || c == ':')) {
hasSep = true;
} else {
break;
}
}
valueStart++;
}
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
}
}

关于java - 如何将 PropertyResourceBundle 与包含空格的键一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com