也许问题似乎是愚蠢的,但我必须处理几个Gbs的文本文件进行预处理。
在Java中是否有任何有效且可能优雅的方法从String
中删除用作分隔符的两个String
之间的所有子串?例如。当您定义两个分隔符时,请说([
和])
,然后从String
“嗨([bla bla])如何([test])你?”一个新的String “你好,你好吗?”必须退回。
我找到的最简单方法如下:
String text = "Hi ([bla bla]) how are ([test]) you?";
while(text.contains("([") && text.contains("])")){
text = text.substring(0, text.indexOf("(["))+
text.substring(text.indexOf("])")+"]))".length());
}
System.out.println(text); //Prints "Hi how are you?"
其中([
和])
是分隔符。
全球使用的外部库(例如Apache库)也是受欢迎的,但首选标准Java API。
答案 0 :(得分:3)
只要不涉及嵌套,您就可以使用正则表达式:
text = text.replaceAll("\\(\\[.*?\\]\\)", "");
如果你想处理空格:
text = text.replaceAll("\\s*\\(\\[.*?\\]\\)\\s*", " ");
答案 1 :(得分:0)
尝试替换所有
input.replaceAll("\[[^\]]*\]", "");
答案 2 :(得分:0)
正则表达式是更简单的方法,但可能在大文件上,Java使用二进制搜索的效率更高,即使用RandomAccessFile读取每字节字节 - http://docs.oracle.com/javase/6/docs/api/java/io/RandomAccessFile.html。