首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试删除部分StringBuilder时出现StringIndexOutOfBounds异常

尝试删除部分StringBuilder时出现StringIndexOutOfBounds异常
EN

Stack Overflow用户
提问于 2020-11-20 05:42:02
回答 3查看 47关注 0票数 1

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

代码语言:javascript
复制
StringBuilder mkPath = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-20 05:50:56

您得到的是StringIndexOutOfBoundsException,因为mkPath.lastIndexOf("/")21,而nameToRemove.length()11

替换

代码语言:javascript
复制
mkPath.delete(mkPath.lastIndexOf("/"),nameToRemove.length());

使用

代码语言:javascript
复制
mkPath.delete(mkPath.lastIndexOf("/"), mkPath.lastIndexOf("/") + nameToRemove.length());

因为end索引必须大于start索引。

有关更多详细信息,请查看StringBuilder.#delete(int, int)

票数 0
EN

Stack Overflow用户

发布于 2020-11-20 17:57:47

操作文件系统路径的最简单方法是使用java.io.Filejava.nio.file.Path

代码语言:javascript
复制
File parent = new File("/sdcard/Downloads/mp3/mysong.mp3").getParentFile();

代码语言:javascript
复制
Path parent = Path.of("/sdcard/Downloads/mp3/mysong.mp3").getParent();

两者都返回不带"/mysong.mp3“的路径。

票数 1
EN

Stack Overflow用户

发布于 2020-11-20 06:00:19

我认为你可以更简单地实现你的目标。您只想删除从最后一个"/“到结尾的所有内容,对吗?

代码语言:javascript
复制
StringBuilder b = new StringBuilder("/sdcard/Downloads/mp3/mysong.mp3");

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

正如在另一个答案中所指出的,delete()的第二个参数不是要删除的字符数,而是要删除的最后一个位置。如果您为此传递了整个构建器内容的长度,它将删除到字符串的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64920449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档