在第二个之前删除一部分字符串/

时间:2015-04-02 08:54:48

标签: java string

我有以下字符串:

String path="/folder1/folder2/folder3/";

我想删除String的第一个路径,以便它变为:

String path="/folder2/folder3/";

所以,我基本上需要知道第二个反斜杠的索引,然后我可以使用subString方法。

为了知道/的第二个位置,我可以运行for循环并检查每个字符。

但我认为必须有更好的解决方案。我想提高我的代码知识。任何帮助将受到高度赞赏。

9 个答案:

答案 0 :(得分:2)

您可以使用正则表达式替换来完成此操作:

String newPath = path.replaceAll("^/[^/]*", "");

这意味着:“在字符串开头/之后(^/),匹配所有字符,但不包括下一个/([^/]*);”。

答案 1 :(得分:1)

有各种方法可以做到这一点。如果您知道必须有第二个" /"这意味着:索引0处有一个第一个。 所以你可以使用String.indexOf(char, index) - 这个版本的indexOf在提供的索引之后搜索给定字符的第一次出现。当你得到第二个索引时,你可以运行subString()。

另一种选择是使用简单的正则表达式来匹配第二个/(请参阅https://docs.oracle.com/javase/tutorial/essential/regex/以获得对该主题的精彩介绍)。

答案 2 :(得分:1)

您可以使用indexOf()两次:

path.indexOf('/', path.indexOf('/')+1))

将为您提供字符串路径的第二个斜杠。

答案 3 :(得分:1)

找到第二个索引最简单的灵魂就是使用indexof两次。 (您可能需要检查-1)

String path="/folder1/folder2/folder3/";
int secondIndex = path.indexOf("/", path.indexOf("/") + 1);
System.out.println(path.substring(secondIndex));

如果你可以使用apache commons,那么StringUtils有一个方法ordinalIndexOf来执行此操作。

答案 4 :(得分:1)

试试这个

String path="/folder1/folder2/folder3/";
path = path.replaceAll("^/[^/]*", "");

答案 5 :(得分:1)

如果您的字符串类似于String path =" folder1 / folder2 / folder3 /&#34 ;; 您可以简单地将其拆分为表单和数组,并使用相同的方法来获得所需的索引。

但在你的情况下,我可以看到另外一个" /"在" folder1"之前,这将导致空单元或空单元格,因此在使用生成的数组之前,您还必须验证内容。

答案 6 :(得分:1)

您可以使用path.indexOf('/', 1)查找索引。这只会跳过第一个字符,可能是/但它也会确保,如果第一个字符不是/,它仍然会删除路径的第一部分。

path = path.substring(path.indexOf('/', 1));

还有其他使用Regex的答案,也许是因为我对这些不好,但我个人认为在这种简单的情况下,最好避免使用它们,以提高可读性。

答案 7 :(得分:1)

如果您确定" /"的出现,请尝试使用java.lang.String.indexOf(String str,int fromIndex)。在第0个指数。

    public static void main(String[] args) {

    String path = "/folder1/folder2/folder3/";
    String newPath = path
            .substring(path.indexOf("/", 1), path.length());
    System.out.println(newPath);
}

答案 8 :(得分:1)

如果目录为Path(或File)对象,则可以使用以下解决方案

Path path = Paths.get("/folder1/folder2/folder3/");
Path removedTopDir = path.getRoot().resolve(path.subpath(1, path.getNameCount()));
System.out.println("resolved path: " + removedTopDir);