我正在尝试从StringBuilder中删除子目录
StringBuilder mkPath = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
String nameToRemove = "/"+new File(mkPath.toString()).getName();
mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());但它一直抛出StringIndexOutOfBounds异常。有没有办法解决这个问题?
发布于 2020-11-20 05:50:56
您得到的是StringIndexOutOfBoundsException,因为mkPath.lastIndexOf("/")是21,而nameToRemove.length()是11。
替换
mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());使用
mkPath.delete(mkPath.lastIndexOf("/"), mkPath.lastIndexOf("/") + nameToRemove.length());因为end索引必须大于start索引。
有关更多详细信息,请查看StringBuilder.#delete(int, int)。
发布于 2020-11-20 17:57:47
操作文件系统路径的最简单方法是使用java.io.File或java.nio.file.Path
File parent = new File("/sdcard/Downloads/mp3/mysong.mp3").getParentFile();或
Path parent = Path.of("/sdcard/Downloads/mp3/mysong.mp3").getParent();两者都返回不带"/mysong.mp3“的路径。
发布于 2020-11-20 06:00:19
我认为你可以更简单地实现你的目标。您只想删除从最后一个"/“到结尾的所有内容,对吗?
StringBuilder b = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
b.delete(mkPath.lastIndexOf("/"),b.length());正如在另一个答案中所指出的,delete()的第二个参数不是要删除的字符数,而是要删除的最后一个位置。如果您为此传递了整个构建器内容的长度,它将删除到字符串的末尾。
https://stackoverflow.com/questions/64920449
复制相似问题