作为输入,我得到字符串"some text\\nsome text"
-> 所以显示为"some text\nsome text"
. 如何删除一个反斜杠并得到
"some text\nsome text"
-> 显示为
"some text
some text"
这也适用于其他特殊字符,如"\t"
? 使用正则表达式可以只做喜欢
textLine.replace("\\n", "\n") and so on.
还有其他方法吗?
你不需要重新发明轮子。您可以org.apache.commons.lang3.StringEscapeUtils
用于非转义 Java 字符串。取消转义在字符串中找到的任何 Java 文字。例如,它会将 ' \
' 和 ' n
' 的序列转换为换行符,除非 ' \
' 前面有另一个 ' \
'。在这种情况下,您需要再 unescape 一次。
代码:
import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava;
public class Unescape {
public static void main(String[] args) {
System.out.println("some text\\nsome text");
System.out.println(unescapeJava("some text\\nsome text"));
}
}
输出:
some text\nsome text
some text
some text
所以这不是很明显,你想从两个字符创建一个字符。
我做了这个方法:
String res="";
boolean backslash=false;
for(char c : "some text\\nsome text".toCharArray()){
if(c!='\\'){
if(backslash){
switch(c){
case 'n' :
res+='\n';
break;
case 't' :
res+='\t';
break;
}
backslash=false;
}else{
res+=c;
}
}
else{
backslash=true;
}
}
也许它会对您有所帮助,它实际上仅适用于我放入开关(EOL 和 Tab)的情况。
注意:如果您想要更好的性能,请将 String 替换为 StringBuilder。
你在玩多行正则表达式吗?然后你可以编译一个正则表达式:
Pattern.compile("^([0-9]+).*", Pattern.MULTILINE);
http://www.javamex.com/tutorials/regular_expressions/multiline.shtml