stringindexoutofbounds异常

ifsvaxew  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(244)

我正在尝试从stringbuilder中删除子目录

StringBuilder mkPath = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");

String nameToRemove = "/"+new File(mkPath.toString()).getName();

mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());

但它一直抛出stringindexoutofbounds异常。有办法解决这个问题吗?

42fyovps

42fyovps1#

你越来越 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) 更多细节。

zynd9foi

zynd9foi2#

我认为你可以更简单地实现你的目标。你只想从最后一个“/”移到最后,对吗?

StringBuilder b = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");

b.delete(mkPath.lastIndexOf("/"),b.length());

如另一个答案所述,第二个参数 delete() 不是要删除的字符数,而是要删除的最后一个位置。如果为此传递整个生成器内容的长度,它将删除到字符串的末尾。

ippsafx7

ippsafx73#

操作文件系统路径的最简单方法是使用 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”的路径。

相关问题