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

Java 无法打印不超过4679个字符的子字符串,java,regex,string,Java,Regex,String,我有一个程序,可以对非常大的字符串(大约100K)进行字符串操作。我的程序的第一步是清理输入字符串,使其只包含某些字符。以下是我的清理方法: public static String analyzeString (String input) { String output = null; output = input.replaceAll("[-+.^:,]",""); output = output.replaceAll("(\\r|\\n)", "");

我有一个程序,可以对非常大的字符串(大约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输出控制台标题中看到。因为这不是我的最后一个程序,所以我忽略了这一点,并继续使用下一个方法对这个“清理”字符串进行模式匹配。下面是模式匹配的代码:

    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;
}
公共静态列表getInterval(字符串输入,字符串正则表达式){
列表输出=新的ArrayList();
//进行模式匹配
模式p1=Pattern.compile(regex);
匹配器m1=p1。匹配器(输入);
//如果找到匹配项
而(m1.find()){
output.add(m1.start());
output.add(m1.end());
}
返回输出;
}

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

eclipse控制台输出中的限制似乎太小了。您可以在
窗口
->
首选项
->
运行/调试
->
控制台

在这里,您可以删除限制或增加控制台缓冲区



顺便说一句,您的第一个方法似乎要重新遍历字符串几次。创建一个正则表达式来匹配您要删除的每个字符,并且只遍历输入一次,不是更好吗?在您的情况下,只使用
[^XYZ]
(或
(?i)[^XYZ]
来匹配大写和小写字母)应该可以做到这一点,因为它包括
[-+.^:,]
(\\r | \\n)
尝试将字符串写入文件。

您尝试过从命令行打印吗?在eclipse中,我看到了很多关于将长行打印到标准输出的问题。您还可以尝试将字符串拆分为多行,以便更容易为eclipse进行消化…@StefanHaustein:我刚刚尝试在控制台中运行,并且得到了正确的输出。Eclipse似乎感到困惑,无法处理此问题。我尝试将大小从80000更改为800000,但仍然无法显示输出。是的,关闭限制后也会出现相同的行为。写入文件或从控制台运行程序也可以。似乎是Eclipse的一个问题。