我已经看过如何使用正则表达式模式在读取文件时删除所有空白行,但我想在所有内容之后删除所有不必要的行。例如:
输入:
asdiofhpaiodf
(空行,不删除)
asdfihap [sdifh
asdpiofhaspdif
asiodfhpai [sdfh
(空行,删除)
(空行,删除)
输出:
asdiofhpaiodf
(空行)
asdfihap [sdifh
asdpiofhaspdif
asiodfhpai [sdfh
答案 0 :(得分:2)
您可以使用
修剪字符串的结尾String trimmedContents = origContents.replaceAll("\\s+$", "");
答案 1 :(得分:0)
只是添加到stribizhev的答案,您可能还想使用System.lineSeparator()
而不是\s
(在大多数情况下\s
更有用,但我不知道您的需求)< / p>
由于我发布了一个答案(无法发表评论),我不妨出去。我的印象是你试图重新调整文件的大小。 (我再次使用System.lineSeparator()
来展示如何使用它。
String regex = "[^"+ System.lineSeparator() + "]" + System.lineSeparator() + "$"; //or use "\\S\\s*$";
Matcher whiteSpace = Pattern.compile(regex).matcher("");
int threshold = 4; //number of characters to look back at the end of file.
byte[] readBytes = new byte[threshold]; //for whatever reason we can't just read in a string :/
try ( RandomAccessFile file = new RandomAccessFile(input_file, "rw")){
//start at the end of file, look for non line separator character.
long cursor;
for(cursor = file.length() - threshold; cursor > 0 ; cursor=cursor-threshold){
file.seek(cursor);
file.readFully(readBytes);
if(whiteSpace.reset(new String(readBytes)).find()){
cursor = cursor + whiteSpace.start() + 1;
break;
}
}
file.setLength(cursor);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
不知道性能会是什么样的,但是我没有阅读整个文件,从最后开始。