2010-03-16 101 views
9

这是一种类似于this question about C#的Java模拟器。如何将字符串转换为Java字符串?

假设我有一个String对象,我想在代码来表示,我想产生一个字符串映射到相同的事情。

hello, "world" 
goodbye 

成为

hello, \"world\"\ngoodbye 

我正要写一个状态机,通过文字摄取串字符,并适当地逃脱,但后来我想知道是否有更好的方法,或者提供一个功能来执行此操作的库。

回答

6

如果你可以添加外部代码,Apache的共享郎有EscapeStringUtils.escapeJava()我认为这不正是你想要的东西。

+1

链接现在分成:( – epeleg 2011-03-01 08:52:44

+0

@epeleg:谢谢,固定 – unwind 2011-03-01 10:52:06

+0

EscapeStringUtils.escapeJava()不会做外报价,如果字符串非空,我需要用其包装:(S == NULL) ?null:“\”“+ StringEscapeUtils.escapeJava(s)+”\“”; – 2012-12-23 00:38:15

2

我的幼稚状态机实现看起来是这样的:

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(); 
} 
+0

你忘了制表符。 – fernacolo 2016-05-22 06:36:50

+0

并且换页符'\ f'和退格'\ b'。 – 2017-11-01 13:08:04

相关问题