【问题标题】:Combine two strings to a single string representing a path [duplicate]将两个字符串组合成一个表示路径的字符串[重复]
【发布时间】:2011-08-01 07:16:10
【问题描述】:

我想将字符串"test/""/go" 合并为"test/go"

我该怎么做?

【问题讨论】:

    标签: java


    【解决方案1】:

    只使用java.io.File 最简单的方法是:

    String combined_path = new File("test/", "/go").getPath();
    

    【讨论】:

    • +1 对于这个没有额外库的简单解决方案,尽管它仅限于两个字符串(这对于大多数情况和问题来说已经足够了)
    • @K.真的是克拉森吗?问题中哪里提到了文件?
    • @Sean Patrick Floyd 你是对的。抱歉,我的大脑有时会向问题中注入内容,而我对此无能为力。 “按原样”提出问题,我们必须采用 Heiko Rupp 解决方案。其他一切都是多余的。
    • @K. Claszen 但假设我们事先知道参数,这将使整个情况变得不必要
    • 请注意,即使路径不存在,此解决方案也可以工作。问题主题是将两个字符串组合成一个表示路径的字符串
    【解决方案2】:

    FilenameUtils.normalize() from Apache Commons IO 做你想做的事。

    示例:

    FilenameUtils.normalize("foo/" + "/bar");
    

    返回字符串"foo/bar"

    【讨论】:

      【解决方案3】:

      根据Jon Skeethere的建议

      public static String combine (String path1, String path2)
      {
          File file1 = new File(path1);
          File file2 = new File(file1, path2);
          return file2.getPath();
      }
      

      【讨论】:

      • FilenameUtils 将是 IMO 一条更好的路线,但如果你想走这条路线,你最好做类似的事情。 new File("/home", "//foobar").getPath().
      【解决方案4】:

      附加两个字符串并将//替换为/,如下所示

      "test//go".replace("//", "/")
      

      输出:test/go

      【讨论】:

        【解决方案5】:
        String test =  "test/";
        String go = "/go";
        String result = test + go.substring(1);
        

        【讨论】:

        • +1 按“原样”回答问题,无需进一步估计。
        【解决方案6】:

        这是一个 Guava 方法,它在从项目的开头和结尾修剪此字符的所有实例后,将项目的 Iterable<String>char 连接起来:

        public static String joinWithChar(final Iterable<String> items,
            final char joinChar){
            final CharMatcher joinCharMatcher = CharMatcher.is(joinChar);
            return Joiner.on('/').join(
                Iterables.transform(items, new Function<String, String>(){
        
                    @Override
                    public String apply(final String input){
                        return joinCharMatcher.trimFrom(input);
                    }
                }));
        }
        

        用法:

        System.out.println(joinWithChar(Arrays.asList("test/", "/go"), '/'));
        

        输出:

        测试/开始


        这个解决方案

        • 不限于文件路径,而是任何类型的字符串
        • 不会替换标记内的任何字符,只会从边界修剪它们

        【讨论】:

          【解决方案7】:

          假设这是一个与文件名有关的问题,不如看看apache-commons-io 及其FilenameUtils

          final String test = "test/";
          final String go ="/go";
          System.out.println(FilenameUtils.normalize(test + go));
          

          窗口输出:

          test\go
          

          normalize 方法会为您做更多的事情,例如在 Windows 系统上将 '/' 更改为 '\'。

          顺便说一句,恭喜你的声誉得分几乎只是问问题:-)

          【讨论】:

          • 只是问题可能就是你的意思:-)
          • @Sean Patrick Floyd 这就是我的意思!固定!
          【解决方案8】:

          更简单:

          "test/" + "." + "/go"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-13
            • 2016-07-28
            • 1970-01-01
            • 1970-01-01
            • 2019-03-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多