【发布时间】:2016-05-03 16:08:24
【问题描述】:
我需要重命名数据库中的一些路径。
我重命名文件夹:
String mainFolder= "D:\test\1\data"; //folder renamed from fd
然后我需要重命名该文件夹内的所有文件和目录:
String file1="D:\test\1\fd\dr.jpg";
String folder1="D:\test\1\fd\fd"; // in this case last fd needs to be renamed
String folder2="src/fd/fd/"; //fake path also needs to be renamed
重命名字符串的最佳和最快方法是什么?
我对“/”的看法:
String folder2= "src/da/da";
String[] splittedFakePath = folder2.split("/");
splittedFakePath[splittedFakePath.length - 2] = "data";
StringBuffer newFakePath = new StringBuffer();
for (String str : splittedFakePath) {
newFakePath.append(str).append("/");
}
重命名后的字符串:src/data/da/
但是当我尝试按“\”拆分时:
Arrays.toString(Pattern.compile(File.separator).split(folder1));
我收到:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
【问题讨论】:
-
你记得转义反斜杠 (
"\\\\") 吗? -
反斜杠是正则表达式中的特殊字符。你需要加倍或者使用
Pattern.compile(File.separator,Pattern.LITERAL)。 -
\在字符串文字中很特殊,但在split使用的正则表达式引擎中也很特殊,因此您需要对其进行两次转义:一次在正则表达式\\中,第二次在字符串"\\\\". -
它实际上适用于“\\\\”