尝试删除部分 StringBuilder 时出现 StringIndexOutOfBounds 异常
StringIndexOutOfBounds Exception when trying to remove part of StringBuilder
我正在尝试从 StringBuilder 中删除一个子目录
StringBuilder mkPath = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
String nameToRemove = "/"+new File(mkPath.toString()).getName();
mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());
但它一直抛出 StringIndexOutOfBounds 异常。有办法解决这个问题吗?
你得到 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)
了解更多详情。
我认为你可以更简单地实现你的目标。您只想删除从最后一个“/”到结尾的所有内容,对吗?
StringBuilder b = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
b.delete(mkPath.lastIndexOf("/"),b.length());
如另一个答案所述,delete()
的第二个参数不是要删除的字符数,而是要删除的最后一个位置。如果为此传递整个构建器内容的长度,它将删除到字符串的末尾。
操作文件系统路径的最简单方法是使用 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();
两个return没有“/mysong.mp3”的路径。
我正在尝试从 StringBuilder 中删除一个子目录
StringBuilder mkPath = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
String nameToRemove = "/"+new File(mkPath.toString()).getName();
mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());
但它一直抛出 StringIndexOutOfBounds 异常。有办法解决这个问题吗?
你得到 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)
了解更多详情。
我认为你可以更简单地实现你的目标。您只想删除从最后一个“/”到结尾的所有内容,对吗?
StringBuilder b = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");
b.delete(mkPath.lastIndexOf("/"),b.length());
如另一个答案所述,delete()
的第二个参数不是要删除的字符数,而是要删除的最后一个位置。如果为此传递整个构建器内容的长度,它将删除到字符串的末尾。
操作文件系统路径的最简单方法是使用 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();
两个return没有“/mysong.mp3”的路径。