我有一个Java字符串
String t = "Region S\u00FCdost SER";
其中\ u00FC是unicode字符“ü”的替代
如果我在上面的字符串中添加一个新的转义字符,我仍然希望我的下面的函数可以逃避除当前字符之外的其他字符。
例如,下面的重新运行函数会在后续迭代中将结果返回为“Region S \\ u00FCdost SER”和“Region S \\\\ u00FCdost SER”。
我们如何防止这种情况?
public static String escapeString(String str)
{
StringBuffer result = new StringBuffer();
// char is 16 bits long and can hold an UTF-16 code
// i iterate on chars and not on code points
// i guess this will be enough until we need to support surrogate pairs
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
switch (c) {
case '"':
result.append("\\\""); //$NON-NLS-1$
break;
case '\b':
result.append("\\b"); //$NON-NLS-1$
break;
case '\t':
result.append("\\t"); //$NON-NLS-1$
break;
case '\n':
result.append("\\n"); //$NON-NLS-1$
break;
case '\f':
result.append("\\f"); //$NON-NLS-1$
break;
case '\r':
result.append("\\r"); //$NON-NLS-1$
break;
case '\'':
result.append("\\'"); //$NON-NLS-1$
break;
case '\\':
result.append("\\\\"); //$NON-NLS-1$
break;
default:
if (c < 128)
{
//is ascii
result.append(c);
}
else
{
result.append(
String.format("\\u%04X", (int) c)); //$NON-NLS-1$
}
}
}
return result.toString();
}
}
答案 0 :(得分:0)
你可以这样做:
case '\\':
if(str.charAt(i+1)!='u')
result.append("\\\\");
else
result.append("\\");
break;
假设\u
将始终表示字符串中的unicode字符序列。
答案 1 :(得分:0)
当您将Java字符串文字写为"Region S\u00FCdost SER"
时,Java编译器会将其解释为字符串值Region Südost SER
,这是escape()
方法在t
上调用时将看到的内容1}}。
如果你想要字符串Region S\u00FCdost SER
,你应该转义\,即"Region S\\u00FCdost SER"
。
如果您继续使用escape()
方法,我相信您会看到您想要的内容。
String s = "Region S\u00FCdost SER";
System.out.println(s); // print original text
for (int i = 0; i < 4; i++) {
s = escapeString(s);
System.out.println(s);
}
输出:
Region Südost SER <-- original text
Region S\u00FCdost SER
Region S\\u00FCdost SER
Region S\\\\u00FCdost SER
Region S\\\\\\\\u00FCdost SER
如果您将输入更改为"He'd say: \"Bitte schön\""
,则会获得:
He'd say: "Bitte schön" <-- original text
He\'d say: \"Bitte sch\u00F6n\"
He\\\'d say: \\\"Bitte sch\\u00F6n\\\"
He\\\\\\\'d say: \\\\\\\"Bitte sch\\\\u00F6n\\\\\\\"
He\\\\\\\\\\\\\\\'d say: \\\\\\\\\\\\\\\"Bitte sch\\\\\\\\u00F6n\\\\\\\\\\\\\\\"
我的意思是,这就是你想要的,对吧?如果没有,请通过实际显示您想要的示例输出来澄清问题。