我有这个字符串
String x="String containning special chars \u202C \n \u202C \u202C \u202C";
如何打印出来:String containning special chars \u202C \n \u202C \u202C \u202C
?
尝试
System.out.println(x.replace("\\","\\\\"));
但是只打印String containning special chars \n
也试过
String out = org.apache.commons.lang3.StringEscapeUtils.unescapeJava(x);
System.out.println(out);
但这也无济于事。
任何有我不知道的建议或API的人?
更新 - 解决方案
关注@lbear aproach我想出了这个函数来处理大多数转义字符串的情况
public static String removeUnicodeAndEscapeChars(String input) {
StringBuilder buffer = new StringBuilder(input.length());
for (int i = 0; i < input.length(); i++) {
if ((int) input.charAt(i) > 256) {
buffer.append("\\u").append(Integer.toHexString((int) input.charAt(i)));
} else {
if (input.charAt(i) == '\n') {
buffer.append("\\n");
} else if(input.charAt(i) == '\t'){
buffer.append("\\t");
}else if(input.charAt(i) == '\r'){
buffer.append("\\r");
}else if(input.charAt(i) == '\b'){
buffer.append("\\b");
}else if(input.charAt(i) == '\f'){
buffer.append("\\f");
}else if(input.charAt(i) == '\''){
buffer.append("\\'");
}else if(input.charAt(i) == '\"'){
buffer.append("\\");
}else if(input.charAt(i) == '\\'){
buffer.append("\\\\");
}else {
buffer.append(input.charAt(i));
}
}
}
return buffer.toString();
}
答案 0 :(得分:3)
使用Integer.toHexString((int)x.charAt(34));
,您可以获取unicode字符串的字符串,并在其前面添加\\u
,您将获得String
。
public static String removeUnicode(String input){
StringBuffer buffer = new StringBuffer(input.length());
for (int i =0; i < input.length(); i++){
if ((int)input.charAt(i) > 256){
buffer.append("\\u").append(Integer.toHexString((int)input.charAt(i)));
} else {
if ( input.charAt(i) == '\n'){
buffer.append("\\n");
} else {
buffer.append(input.charAt(i));
}
}
}
return buffer.toString();
}
答案 1 :(得分:3)
Apache Commons StringEscapeUtils有HTML编码。此编码非常接近您可能需要的
String escaped code = StringEscapeUtils.escapeHtml(rowId)
答案 2 :(得分:0)
String original = "String containning special chars \u202C \n \u202C \u202C \u202C";
String escaped = original.replace("\u202C", "\\u202C");
System.out.println(escaped);