我有以下字符串:
String path="/folder1/folder2/folder3/";
我想删除String的第一个路径,以便它变为:
String path="/folder2/folder3/";
所以,我基本上需要知道第二个反斜杠的索引,然后我可以使用subString
方法。
为了知道/的第二个位置,我可以运行for循环并检查每个字符。
但我认为必须有更好的解决方案。我想提高我的代码知识。任何帮助将受到高度赞赏。
答案 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);