Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在第二个字符串之前删除字符串的一部分/_Java_String - Fatal编程技术网

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

Java 在第二个字符串之前删除字符串的一部分/,java,string,Java,String,我有以下字符串: String path="/folder1/folder2/folder3/"; 我要删除字符串的第一个路径,使其成为: String path="/folder2/folder3/"; 所以,我基本上需要知道第二个反斜杠的索引,然后我可以使用子字符串方法 为了知道/的第二个位置,我可以运行for循环并检查每个字符 但我认为一定有更好的解决办法。我想提高我的代码知识。我们将非常感谢您的帮助 您可以使用正则表达式替换来完成此操作: String newPath = path.

我有以下字符串:

String path="/folder1/folder2/folder3/";
我要删除字符串的第一个路径,使其成为:

String path="/folder2/folder3/";
所以,我基本上需要知道第二个反斜杠的索引,然后我可以使用子字符串方法

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


但我认为一定有更好的解决办法。我想提高我的代码知识。我们将非常感谢您的帮助

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

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

这意味着:在字符串^/开头的/之后,匹配所有字符,直到但不包括下一个/[^/]*

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

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

这意味着:在字符串^/开头的/之后,匹配所有字符,直到但不包括下一个/[^/]*

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


另一种选择是使用一个简单的正则表达式来匹配第二个/请参阅本主题的精彩介绍。

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

另一种选择是使用一个简单的正则表达式来匹配第二个/请参阅本主题的精彩介绍。

您可以使用indexOf两次:

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

您可以使用indexOf两次:


将给出字符串路径的第二个斜杠。

查找第二个索引的最简单方法是使用indexof两次。您可能需要检查-1

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

如果您可以使用ApacheCommons,那么StringUtils有一个方法可以做到这一点

查找第二个索引的最简单方法是使用indexof两次。您可能需要检查-1

String path="/folder1/folder2/folder3/";
int secondIndex = path.indexOf("/", path.indexOf("/") + 1);
System.out.println(path.substring(secondIndex));
如果您可以使用ApacheCommons,那么StringUtils有一个方法可以做到这一点

试试这个

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

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

如果您有一个类似字符串path=folder1/folder2/folder3/的字符串; 您可以简单地将其拆分为form和array,并使用它们来获得所需的索引


但是在你的例子中,我可以看到一个额外的/before folder1,这将导致一个空白或空的第一个单元格,因此在使用生成的数组之前,你还必须验证内容。

如果你有一个类似字符串path=folder1/folder2/folder3/; 您可以简单地将其拆分为form和array,并使用它们来获得所需的索引

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

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

path = path.substring(path.indexOf('/', 1));
使用正则表达式还有其他答案,可能是因为我不擅长这些,但我个人认为在这种简单的情况下,最好避免使用它们,以提高可读性。

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

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

使用正则表达式还有其他答案,可能是因为我不擅长这些,但我个人认为,在这种简单的情况下,最好避免使用它们,以提高可读性。

如果您确定在第0个索引处出现了/,请尝试使用java.lang.String.indexOfString str,int fromIndex

    public static void main(String[] args) {

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

如果确定在第0个索引处出现/,请尝试使用java.lang.String.indexOfString str,int fromIndex

    public static void main(String[] args) {

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

如果将目录作为路径或文件对象,则可以使用以下解决方案

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

如果将目录作为路径或文件对象,则可以使用以下解决方案

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

好的。但它应该替换为一个空字符串,否则将以两条斜杠结束。字符串newPath=path.replaceAll^/[^/]*;更新为不留两条斜线。好的。但它应该替换为一个空字符串,否则将以两条斜杠结束。字符串newPath=path.replaceAll^/[^/]*;更新为不留两个斜杠。谢谢,这一个简单地解决了我的问题。我也很欣赏正则表达式的解决方案,但可能是更复杂的解决方案。谢谢,这一个简单地解决了我的问题。我也喜欢这个应用程序 重复使用正则表达式解决方案,但可能适用于更复杂的解决方案。