用于选择的Java Mysql Escape反斜杠

时间:2014-10-03 18:03:32

标签: java mysql regex backslash

关于在java中转义反斜杠,已经有很多问题了。根据我使用的内容,我可以替换char序列或正则表达式。但是这适用于逃避一个或两个反斜杠。在我的情况下,我需要用4替换每个\的每个出现。

编辑:在下面我故意省略第二次斜线以明确从1到4。

String s = "X:\Test\test\test"; //to String s = "X:\\\\Test\\\\test\\\\test";

所以人们会想到:

s.replace("\\","\\\\\\\\");

或通过正则表达式:

 s.replaceAll("\\\\","\\\\\\\\\\\\\\\\");

但无论我做什么,结果字符串总是包含最多2个反向反斜杠\。 我不会得到4 \或更多。 似乎替换功能总是重复,直到只留下2个反斜杠。

我是否真的需要连接到一个新的String才能获得4个反斜杠?无法通过替换来解决这个问题?

或者有一种逃避可能性来搜索mysql中的文件路径? 我的数据库存储" X:\ test \ test",为了能够找到它我必须用4个反斜杠逃脱:

select * from f where filepath like 'X:\\\\test%'

任何想法?

编辑:我的日食确实打破了它,重新启动后,它打印出4个反斜杠。很抱歉给您带来不便。

2 个答案:

答案 0 :(得分:0)

这对我来说似乎不对。 首先是“String s =”X:\ Test \ test \ test“;”不会编译。

其次,您确定正确计算斜线吗?

考虑以下代码:

public static void main(String[] args) throws Exception {
    String s = "X:\\Test\\test\\test";
    s = s.replace("\\", "\\\\\\\\");
    System.out.println(s);
}

这会将以下内容输出到控制台:

X:\\\\Test\\\\test\\\\test

如果您在运行时检查IDE中的变量以获取带有转义字符串的字符串,则会显示为:

X:\\\\\\\\Test\\\\\\\\test\\\\\\\\test

也许你没有将s =设置为s.replace()的结果?

答案 1 :(得分:0)

使用

"abc\\abc".replaceAll("\\u005c", "\\\\\\\\\\\\\\\\");

输出

abc\\\\abc

另外,

String s = "asdf\asdf";  //does not compile