【问题标题】:How to replace String with different slashes? [duplicate]如何用不同的斜杠替换字符串? [复制]
【发布时间】: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 使用的正则表达式引擎中也很特殊,因此您需要对其进行两次转义:一次在正则表达式 \\ 中,第二次在字符串 "\\\\" .
  • 它实际上适用于“\\\\”

标签: java regex string split


【解决方案1】:

查看java的Stringreplace(...)方法。

字符串替换非常棒,比尝试正则表达式要好得多。

请记住,真正的目录处理有一些特殊情况,它们不适合直接进行字符串操作。例如,'//' 在类 Unix 系统中经常被压缩为 '/',如果你关心正确的目录极端情况,那么使用 Java Path

【讨论】:

  • 当我得到文件的路径时,我收到带有 "\" 的字符串。保存到数据库之前是否需要将“\”替换为“/”?
  • @RuslanLomov 请记住,在 Java 中,字符 '\' 是转义指示符,例如,'\n' 是换行符,'\t' 是制表符。要获得单个字符,您需要转义斜杠,例如'\\'。另外,我不知道您对数据库的要求是什么,但这些要求比我的看法更重要。
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 2019-05-18
  • 2018-02-27
  • 2014-09-17
  • 1970-01-01
  • 2013-06-20
  • 2011-08-01
  • 2022-01-15
相关资源
最近更新 更多