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^/[^/]*;更新为不留两个斜杠。谢谢,这一个简单地解决了我的问题。我也很欣赏正则表达式的解决方案,但可能是更复杂的解决方案。谢谢,这一个简单地解决了我的问题。我也喜欢这个应用程序 重复使用正则表达式解决方案,但可能适用于更复杂的解决方案。