我从字符串操作

时间:2017-12-18 10:59:55

标签: java

尝试删除"<>"个字符之间的所有字符,最多可以使用500个字符串,之后会出现以下错误:

  

java.lang.OutOfMemoryError

我需要执行此操作的字符串包含21,000+个字符。苦苦挣扎,看看为什么缩小String的大小会使它崩溃。

private static String removeGarbage(String resultString) throws IOException {               
    int lineLen = resultString.length();

    while (resultString.indexOf("<")>=0) {
        for (int i = 0; i < lineLen; i++) {
            if (resultString.indexOf("<")<=0)
                break;
            resultString = resultString.substring(0,resultString.indexOf("<")) + resultString.substring(resultString.indexOf(">")+1, resultString.length());
        }
    }

    return resultString;
}

3 个答案:

答案 0 :(得分:0)

一个相当简单的正则表达式应该这样做:

String input = "{{<\"}<>}{<o}<ui'<>}}";
String output = input.replaceAll("<[^>]*>", "");

System.out.println(output); // {{}{}}

答案 1 :(得分:0)

您可以通过使用正则表达式替换来避免创建许多大String值:

private static String removeGarbage(String resultString) {
    return resultString.replaceAll("\\<.*?\\>", "");
}
  • \\<与左括号匹配
  • .*?匹配
  • 之间的任何内容
  • \\>与结束括号相匹配

答案 2 :(得分:-2)

只需使用两次substring来电indexOf来电即可。 这里有一个扩展示例:

Integer begin = resultString.indexOf("<");
Integer end = resultString.indexOf(">", begin);
return resultString.substring(begin, end);