2010-03-16 58 views
9

Đây là loại tương tự Java của this question about C#.Làm thế nào để bạn chuyển đổi một chuỗi thành chuỗi ký tự Java?

Giả sử tôi có một đối tượng String mà tôi muốn đại diện trong mã và tôi muốn tạo một chuỗi ký tự để ánh xạ tới cùng một thứ.

Ví dụ

hello, "world" 
goodbye 

trở thành

hello, \"world\"\ngoodbye 

Tôi chỉ muốn viết một máy nhà nước mà ingests các chuỗi ký tự bằng cách nhân vật và thoát một cách thích hợp, nhưng sau đó tôi tự hỏi nếu có một cách tốt hơn hoặc thư viện cung cấp chức năng để thực hiện việc này.

Trả lời

6

Nếu bạn có thể thêm mã bên ngoài, Commons Lang của Apache có EscapeStringUtils.escapeJava() mà tôi nghĩ thực hiện chính xác những gì bạn muốn.

+1

liên kết hiện đã bị hỏng: ( – epeleg

+0

@epeleg: Cảm ơn, đã sửa. – unwind

+0

EscapeStringUtils.escapeJava() không làm dấu ngoặc kép bên ngoài, nếu chuỗi không rỗng. Tôi sẽ cần bọc nó với: (s == null) ? null: "\" "+ StringEscapeUtils.escapeJava (s) +" \ ""; –

2

ngây thơ máy nhà nước thực hiện của tôi trông như thế này:

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

Bạn đã quên ký tự tab. – fernacolo

+0

Và formfeed '\ f' và backspace '\ b'. –

Các vấn đề liên quan