如何通过BufferReader删除读取流开始时的空间

时间:2015-12-18 03:57:50

标签: java filestream

我已尝试按照代码段阅读文件

mFileReader = new FileReader(mAutoUpgradeFile);
mBufferedReader = new BufferedReader(mFileReader);
mStringBuilder = new StringBuilder();
String line=null;
while( null != (line=mBufferedReader.readLine()) ){
   mStringBuilder.append(line);
   Log.d(TAG,"read line ="+line+"\n");
}

mAutoUpgradeFile

的内容
aaaaa
bbbbbb
ccccccccc
dddddddddd

通过readLine输出

读取行= 空间 aaaaa

读取行= bbbbbb

第一次更新2015-12-18

打印的第一个字节的ASCII 它在下面的同一行:

enter image description here

65279 在这种情况下意味着什么?

更新2015-12-18第二次

UTF-8 + BOM 格式可能会引入

65279

将编码格式更改为 UTF-8 + ! BOM 格式

此问题已解决

谢谢大家。

3 个答案:

答案 0 :(得分:0)

String#trim()从字符串中删除任何前导和尾随空格。

  

返回字符串的副本,省略前导和尾随空格。

此外,您可以使用String#replaceFirst(String regex, String replacement)

  

将此字符串的第一个子字符串替换为给定的正则表达式与给定的替换。

使用正则表达式:

line= line.replaceFirst("^ ", "");

答案 1 :(得分:0)

使用String#trim()方法或line.replaceAll("^\\s+|\\s+$", "")将从末尾修剪空白。

左侧修剪:

line.replaceAll("^\\s+", "");

右边修剪:

line.replaceAll("\\s+$", "");

答案 2 :(得分:0)

如果“xxx”跟踪打印出从该行读取的第一个字符,那么你有一行以unicode char 65279开头(我不知道代表什么),所以它实际上不是空白或空格字符。

如果您确定在读取一行时想要允许哪些字符范围,我建议您修剪超出该范围的主要事件。

例如:要修剪A-Z,a-z和0-9中的所有前导字符:

line=line.replaceFirst("[^a-zA-Z0-9]*", "");