首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Trim() vs IndexOf()

Trim() vs IndexOf()
EN

Stack Overflow用户
提问于 2017-01-04 06:28:18
回答 3查看 389关注 0票数 0

我正在解析100个文件,其中包含1000行。

我必须检查行是否以某些关键字开头。

我有两个选择,不确定该考虑哪一个。

选项1:

代码语言:javascript
运行
AI代码解释
复制
    String[] keywordsArr = { "Everything", "Think", "Result", "What", "#Shop",  "#Cure" };
    for (int i = 0; i < linesOfCode.length; i++) {

        for (String keyWord : keywordsEndingAtEndOfLogicalLine) {

            if (linesOfCode[i].indexOf(keyWord) > -1) {

                if (linesOfCode[i].trim().startsWith(keyWord)) {

                    linesOfCode[i] = "";
                    break;
                }
            }
        }
    }

选项2:

代码语言:javascript
运行
AI代码解释
复制
String[] keywordsArr = { "Everything", "Think", "Result", "What", "#Shop",  "#Cure" };
    for (int i = 0; i < linesOfCode.length; i++) {

        for (String keyWord : keywordsArr) {

            if (linesOfCode[i].trim().startsWith(keyWord)) {

                    linesOfCode[i] = "";
                    break;
            }
        }
    }

以关键字开头的行频为1/ 100。

EN

回答 3

Stack Overflow用户

发布于 2017-01-04 15:17:41

扫描整个字符串以查找关键字没有什么意义,只是为了避免查找字符串开头的关键字。如果这个想法是为了避免昂贵的trim,那么使用一种更便宜的技术来查找队列中的第一个令牌可能是合理的。

请注意,如果行以其前缀为关键字的单词开头,则startsWith比较可能会产生误报。例如,如果关键字是break,则代码行如下:

代码语言:javascript
运行
AI代码解释
复制
breakfast = "ham and eggs";

会被错误地消除。

您可能希望研究一下如何使用StringTokenizer提取字符串中的第一个单词,或者使用正则表达式更好。

票数 0
EN

Stack Overflow用户

发布于 2017-01-09 08:34:45

这是正则表达式非常有用的地方。您的代码等同于

代码语言:javascript
运行
AI代码解释
复制
for (int i = 0; i < linesOfCode.length; ++i) {
    linesOfCode[i] = linesOfCode.replaceAll(
        "^\\s+(Everything|Think|Result|what|#Shop,#Cure).*", "");
}

但您可能需要在关键字后加上单词边界(\\b)。为了获得更快的速度,您应该像这样编译您的正则表达式

代码语言:javascript
运行
AI代码解释
复制
private static final Pattern PATTERN = Pattern.compile(
    ^\\s+(Everything|Think|Result|what|#Shop,#Cure)\\b");

for (int i = 0; i < linesOfCode.length; ++i) {
    if (Pattern.matcher(linesOfCode[i]).matches()) {
        linesOfCode[i] = "";
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-01-04 07:40:08

尝试使用continue而不是break。continue不会停止循环,而是会告诉程序上一级,从而继续循环下一项。

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

https://stackoverflow.com/questions/41457529

复制
相关文章

相似问题

领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档