java - 无法打印不超过 4679 个字符的子字符串

标签 java regex string

我有一个程序可以对非常大的字符串(大约 100K)进行字符串操作。我的程序的第一步是清理输入字符串,使其仅包含某些字符。这是我的清理方法:

    public static String analyzeString (String input) {
    String output = null;

    output = input.replaceAll("[-+.^:,]","");
    output = output.replaceAll("(\\r|\\n)", "");
    output = output.toUpperCase();
    output = output.replaceAll("[^XYZ]", "");
    return output;
}

当我打印长度为 97498 的“输入”字符串时,它打印成功。清理后我的输出字符串长度为 94788。我可以使用 output.length() 打印大小,但是当我尝试在 Eclipse 中打印它时,输出为空,我可以在 Eclipse 输出控制台 header 中看到。由于这不是我的最终程序,因此我忽略了这一点并继续执行下一个方法,对该“清理后”的字符串进行模式匹配。这是模式匹配的代码:

    public static List<Integer> getIntervals(String input, String regex) {
    List<Integer> output = new ArrayList<Integer> ();
    // Do pattern matching
    Pattern p1 = Pattern.compile(regex);
    Matcher m1 = p1.matcher(input);

    // If match found
    while (m1.find()) {
        output.add(m1.start());
        output.add(m1.end());
    }


    return output;
}

基于这个程序,我将模式匹配的开始和结束间隔确定为 12351 和 87314。我尝试将此匹配打印为 output.substring(12351, 87314),但只得到空白输出。多次命中和试运行得出的结论是,我可以打印的最大子字符串的长度为 4679。如果我尝试 4680,我再次得到空白输入。我的困惑是,如果我能够打印原始字符串(97498)长度,为什么我无法打印清理后的字符串(长度94788)或子字符串(长度> 4679)。是否是由于正则表达式实现可能导致一些内存问题而我的系统无法处理该问题?我安装了 4GB 内存。

最佳答案

尝试将字符串写入文件。

关于java - 无法打印不超过 4679 个字符的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891162/

相关文章:

java - 以编程方式绘制选择器

Python 字符串文字、正则表达式和 sed

c# - 替换具有 <UNKNOWN/> 标签的标签 <NPS></NPS>

javascript - 用于查找重复出现的多个非数字字符的正则表达式模式

Python类抛出: can't convert 'list' object to str implicitl

java - 如何在 | 上拆分字符串Java 中的(管道)

javascript - CodeWars/合并字符串检查器

java - 为什么我通过 hector 将 double/float 列插入 Cassandra 并得到错误的 int 数据库值

java - 在 liquibase 上用 JSON 内容重构数据库

java - 如何通过 DOM Parser/Java 交换两个 XML 元素