首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地从字符串中移除字符

有效地从字符串中移除字符
EN

Stack Overflow用户
提问于 2014-02-28 08:04:59
回答 4查看 184关注 0票数 2

作为面试实践的一部分,我写了这个功能。此方法从给定字符串中移除字符。

当涉及到运行时/空间时,我想知道如何使这段代码更高效。我认为我的代码是O(n),我不确定我是否能提高效率。然而,也许使用诸如StringBuffer或StringBuilder之类的东西会增加一些呢?不确定,因为我对Java还有点陌生。

代码语言:javascript
复制
public static String takeOut(String str, char c) {
    int len = str.length();
    String newstr = "";
    for (int i = 0; i < len; i++) {
        if (str.charAt(i) != c) {
            newstr = newstr + str.charAt(i);
        }
    }
    return newstr;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-28 08:10:36

字符串在Java中是不可变的,所以您的答案实际上会导致创建字符串的len数。这意味着它们被复制了len时间,所以这里有O(N*N)代码。StringBuilder绝对是一种更好的方法。

代码语言:javascript
复制
public static String takeOut(String str, char c) {
    int len = str.length();
    StringBuilder newstr = new StringBuilder();
    for (int i = 0; i < len; i++) {
        if (str.charAt(i) != c) {
            newstr.append((char)str.charAt(i));
        }
    }
    return newstr.toString();
}

一个更简单的方法是使用内置的函数:

代码语言:javascript
复制
public static String takeOut(String str, char c) {
    return str.replace(String.valueOf(c), "");
}
票数 3
EN

Stack Overflow用户

发布于 2014-02-28 08:07:23

StringBuilder肯定会阻止您的代码在每次迭代中创建新字符串。此外,要删除的字符是否仅包含在字符串中一次?然后,您可以在第一次匹配之后中断for循环。此外,本地存储String#charAt的结果,以避免两次调用该方法。

票数 2
EN

Stack Overflow用户

发布于 2014-02-28 08:10:01

你试过吗

代码语言:javascript
复制
str.replaceAll(c,"");

?也许Java-Runtime可以最快地替换(删除).

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

https://stackoverflow.com/questions/22089524

复制
相关文章

相似问题

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