这是一种类似于this question about C#的Java模拟器。如何将字符串转换为Java字符串?
假设我有一个String
对象,我想在代码来表示,我想产生一个字符串映射到相同的事情。
例
hello, "world"
goodbye
成为
hello, \"world\"\ngoodbye
我正要写一个状态机,通过文字摄取串字符,并适当地逃脱,但后来我想知道是否有更好的方法,或者提供一个功能来执行此操作的库。
这是一种类似于this question about C#的Java模拟器。如何将字符串转换为Java字符串?
假设我有一个String
对象,我想在代码来表示,我想产生一个字符串映射到相同的事情。
例
hello, "world"
goodbye
成为
hello, \"world\"\ngoodbye
我正要写一个状态机,通过文字摄取串字符,并适当地逃脱,但后来我想知道是否有更好的方法,或者提供一个功能来执行此操作的库。
如果你可以添加外部代码,Apache的共享郎有EscapeStringUtils.escapeJava()
我认为这不正是你想要的东西。
我的幼稚状态机实现看起来是这样的:
public String javaStringLiteral(String str)
{
StringBuilder sb = new StringBuilder("\"");
for (int i=0; i<str.length(); i++)
{
char c = str.charAt(i);
if (c == '\n')
{
sb.append("\\n");
}
else if (c == '\r')
{
sb.append("\\r");
}
else if (c == '"')
{
sb.append("\\\"");
}
else if (c == '\\')
{
sb.append("\\\\");
}
else if (c < 0x20)
{
sb.append(String.format("\\%03o", (int)c));
}
else if (c >= 0x80)
{
sb.append(String.format("\\u%04x", (int)c));
}
else
{
sb.append(c);
}
}
sb.append("\"");
return sb.toString();
}
你忘了制表符。 – fernacolo 2016-05-22 06:36:50
并且换页符'\ f'和退格'\ b'。 – 2017-11-01 13:08:04
链接现在分成:( – epeleg 2011-03-01 08:52:44
@epeleg:谢谢,固定 – unwind 2011-03-01 10:52:06
EscapeStringUtils.escapeJava()不会做外报价,如果字符串非空,我需要用其包装:(S == NULL) ?null:“\”“+ StringEscapeUtils.escapeJava(s)+”\“”; – 2012-12-23 00:38:15