首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不知道字符数的情况下从StringBuilder中删除最后一行

在不知道字符数的情况下从StringBuilder中删除最后一行
EN

Stack Overflow用户
提问于 2015-06-18 14:00:23
回答 3查看 16.1K关注 0票数 5

我想知道在不知道最后一行字符数量的情况下,是否存在从StringBuilder对象中删除最后一行的简单方法。

示例:

你好,你好? 很好谢谢! 好吧完美..。

我想去掉“好,完美.”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-18 14:05:10

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder("Hello, how are you?\nFine thanks!\nOk, Perfect...");

int last = sb.lastIndexOf("\n");
if (last >= 0) { sb.delete(last, sb.length()); }

http://ideone.com/9k8Tcj

编辑:如果要删除最后一个非空行,请执行

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder(
        "Hello, how are you?\nFine thanks!\nOk, Perfect...\n\n");
if (sb.length() > 0) {
    int last, prev = sb.length() - 1;
    while ((last = sb.lastIndexOf("\n", prev)) == prev) { prev = last - 1; }
    if (last >= 0) { sb.delete(last, sb.length()); }
}

http://ideone.com/AlzQe0

票数 11
EN

Stack Overflow用户

发布于 2015-06-18 14:09:36

取决于您的String是如何构造的,以及您的目标是什么,不向StringBuilder添加最后一行而不是删除它可能更容易。

票数 3
EN

Stack Overflow用户

发布于 2015-06-18 14:39:53

根据您的性能要求,有几个选项:

正如其他人已经提到的,一个选项是查找\n的最后一个索引,如果它是最后一个字符,递归地查找下一个到最后一个索引等等,直到您到达最后一个非空行为止。

另一种选择是使用正则表达式查找以下内容:

代码语言:javascript
运行
复制
StringBuilder sb = new StringBuilder("Hello, how are you?\nFine thanks!\nOk, Perfect...\n\n");
Pattern p = Pattern.compile("\n[^\n]+\n+$");
Matcher m= p.matcher( sb );

//if there is a last line that matches our requirements
if( m.find() ) {
  sb.delete( m.start( 0 ), m.end( 0 ) );
}

如果您认为空格为空,则可以将表达式更改为\n[^\n]+[\s\n]+$ (作为"\n[^\n]+[\\s\n]+$"的Java )。

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

https://stackoverflow.com/questions/30917515

复制
相关文章

相似问题

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