作为输入,我得到的字符串"some text\nsome text"
->,显示为"some textnsome text"
.怎么可能删除一个反斜杠并获取 "some textnsome text"
->显示为
"some text
some text"
这也适用于其他特殊字符,例如"t"
?使用正则表达式,可以只做像 textLine.replace("\n", "n") and so on.
还有别的办法吗?
你不需要重新发明轮子。您可以将 org.apache.commons.lang3.StringEscapeUtils
用于取消转义的 Java 字符串。取消转义字符串中找到的任何 Java 文本。例如,它会将 '' 和 '
n
' 的序列转换为换行符,除非 '' 前面有另一个 '
'。在这种情况下,您需要再逃脱一次。
代码:
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 textnsome text
some text
some text
你在玩多行正则表达式吗?然后你可以编译一个正则表达式:
Pattern.compile("^([0-9]+).*", Pattern.MULTILINE);
http://www.javamex.com/tutorials/regular_expressions/multiline.shtml
所以这不是那么明显,你想从两个字符创建一个字符。
我做了这个方法:
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)的情况。
注意:如果你想要更好的性能,用StringBuilder替换String。