java - 在 Java 中拆分字符串的最有效方法

标签 java string parsing split stringtokenizer

为了这个问题,假设我有一个 String,其中包含值 Two;.Three;.Four(依此类推),但元素是由 ;. 分隔。

现在我知道有多种拆分字符串的方法,例如 split()StringTokenizer(速度更快,效果很好),但我的输入文件在附近1GB,我正在寻找比 StringTokenizer 稍微高效的东西。

经过一些研究,我发现 indexOfsubstring 非常有效,但示例只有单个分隔符或结果仅返回单个单词/元素。

使用 indexOfsubstring 的示例代码:

String s = "quick,brown,fox,jumps,over,the,lazy,dog";
int from = s.indexOf(',');
int to = s.indexOf(',', from+1);
String brown = s.substring(from+1, to);

上面的代码适用于打印 brown 但我如何使用 indexOfsubstring 来拆分带有多个分隔符的行并显示所有项目如下所示。

预期输出

Two
Three
Four
....and so on

最佳答案

这是我用于拆分大型 (1GB+) 制表符分隔文件的方法。它仅限于 char 定界符以避免任何额外方法调用的开销(这可能会被运行时优化),但它可以很容易地转换为字符串定界符。如果有人能想出更快的方法或对此方法进行改进,我会很感兴趣。

public static String[] split(final String line, final char delimiter)
{
    CharSequence[] temp = new CharSequence[(line.length() / 2) + 1];
    int wordCount = 0;
    int i = 0;
    int j = line.indexOf(delimiter, 0); // first substring

    while (j >= 0)
    {
        temp[wordCount++] = line.substring(i, j);
        i = j + 1;
        j = line.indexOf(delimiter, i); // rest of substrings
    }

    temp[wordCount++] = line.substring(i); // last substring

    String[] result = new String[wordCount];
    System.arraycopy(temp, 0, result, 0, wordCount);

    return result;
}

关于java - 在 Java 中拆分字符串的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267777/

相关文章:

java - DoFn.Setup 和 DoFn.StartBundle 有什么区别?

ios - 如何通过xml解析访问图像?

parsing - 如何使用 ansible 解析来自显示版本(cisco ios)的元数据

java - 以看似随机的间隔获取 NullPointerException,不知道为什么

java - 有没有什么简单的方法可以将用户输入导出到文本文件中?

java - java中的响应头验证

python - 将数字和字符串列表转换为单个字符串 python

python - Tkinter 标签更新问题

c - 反转字符串

c - 解析文件并将其存储到 BST 中