将两个字符串合并为一个表示路径的字符串

3

我想把字符串"test/""/go"组合成"test/go"

我该怎么做呢?

8个回答

11

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

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

1
虽然这种简单的解决方案仅限于两个字符串(对于大多数情况和问题来说已经足够了),但不需要额外的库,因此值得一试。+1 - FrVaBe
@K. Claszen 真的吗?问题中哪里提到了文件? - Sean Patrick Floyd
@Sean Patrick Floyd 你说得对。抱歉,我的大脑有时会在问题中注入内容,我无法控制。按照原样的问题,我们必须采用Heiko Rupp的解决方案。其他一切都是过度设计。 - FrVaBe
@K. Claszen,但这假设我们提前知道参数,这将使整个情况变得不必要。 - Sean Patrick Floyd
请注意,即使路径不存在,此解决方案也可以正常工作。问题主题是将两个字符串合并为表示路径的单个字符串 - StackExchange saddens dancek

6

5

正如Jon Skeet这里所建议的那样:

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

1
在我看来,FilenameUtils 是一个更好的选择,但如果你想走这条路,最好做的是像这样做。new File("/home", "//foobar").getPath()。 - csgeek

4

将两个字符串连接起来,并用下面的方法将 // 替换为 /

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

输出:test/go

2
String test =  "test/";
String go = "/go";
String result = test + go.substring(1);

+1 对于“原样”回答问题,不做任何进一步的估计。 - FrVaBe

1
这是一个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"), '/'));

输出:

test/go


这个解决方案

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

1

如果这是一个与文件名相关的问题,那么可以看一下apache-commons-io和它的FilenameUtils类。

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

在Windows上的输出:

test\go

normalize方法可以为您提供更多帮助,例如在Windows系统上将“/”更改为“\”。

顺便恭喜您通过几乎只提问就获得了声望分数:-)


你可能是想说只是“提问”问题吧 :-) - Sean Patrick Floyd
@Sean Patrick Floyd 这就是我的意思!已修复! - FrVaBe

-2
更简单的方法:
"test/" + "." + "/go"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接