我有一个String,它是从我的系统动态获取的路径。
我把它存放在一个字符串中
C:\Users\SXR8036\Downloads\LANE-914.xls
我需要传递此路径来读取excel文件函数,但需要使用正斜杠替换反斜杠。
我想要C:/Users/SXR8036/Downloads/LANE-914.xls
之类的东西
即所有反向斜线都被前锋替换为
使用String替换方法我只能用a-z字符替换,但是当我替换特殊字符时显示错误
something.replaceAll("[^a-zA-Z0-9]", "/");
我必须传递String名称才能读取文件。
答案 0 :(得分:3)
在这种情况下,最好使用非正则表达式replace()
而不是正则表达式replaceAll()
。你不需要这个替换的正则表达式,它使事情变得复杂,因为它需要额外的转义。反斜杠是Java中的一个特殊字符,也是正则表达式中的特殊字符,所以在Java中,如果你想要一个直反斜杠,你需要将它加倍\\
,如果你想在Java中用正则表达式直接反斜杠,你必须四倍它\\\\
。
something = something.replace("\\", "/");
在幕后,replace(String, String)
使用正则表达式模式(至少在Oracle JDK中),因此有一些开销。在您的具体情况下,您实际上可以使用单个字符替换,这可能更有效(不是它可能很重要!):
something = something.replace('\\', '/');
如果你要使用正则表达式:
something = something.replaceAll("\\\\", "/");
或者:
something = something.replaceAll(Pattern.quote("\\"), "/");
答案 1 :(得分:0)
要用replaceAll替换反斜杠,您必须在正在使用的正则表达式中正确地转义它们。
在您的情况下,正确的表达式是:
final String path = "C:\\Users\\SXR8036\\Downloads\\LANE-914.xls";
final String normalizedPath = path.replaceAll("\\\\", "/");
由于反斜杠本身是Java字符串中的转义字符,因此需要对其进行两次转义才能正常工作。
通常,您可以将非常复杂的正则表达式传递给String.replaceAll
。有关详细信息,请参阅java.lang.String.replaceAll的JavaDocs,特别是java.util.regex.Pattern。