2015-06-25 197 views
4

我的程序正在读取文本文件并根据文本执行操作。但文本的第一行是有问题的。显然它以“”开头。这是搞乱我的startsWith()检查。字符串以空字符串开头(“”)

要了解我用这个代码的问题:

System.out.println(thisLine 
     + " -- First char : (" + thisLine.charAt(0) 
     + ") - starts with ! : " 
     + thisLine.startsWith("!")); 

String thisLine是文本文件的第一行。

写入此控制台: ! use ! to add comments. Lines starting with ! are not read. -- First char :() - starts with ! : false

这是怎么回事,如何解决这一问题?我希望它意识到该行以“!”开头不“”

+1

'charAt(0)'*不能*返回一个“空字符串”或任何*字符串*。你从'System.out.println((int)thisLine.charAt(0))'得到了什么? – JimmyB

+2

为什么不检查调试第一个字符? – deathangel908

+0

@HannoBinder我得到了'65279' – WVrock

回答

4

收集矿山和其他人的意见变成一个答案留给后人返回true,您的字符串可能包含不可打印的控制字符。尝试

System.out.println((int)thisLine.charAt(0))

打印出自己的数字代码或

my_string.replaceAll("\\p{C}", "?");

,以取代与控制字符 '?'。

System.out.println((int)thisLine.charAt(0))为您打印65279这将是一个零宽度空间的Unicode代码点,而不是不可打印但在输出上不可见。 (见Why is  appearing in my HTML?)。

无论是从文件中删除多余的空格字符,从字符串(my_string.replaceAll("\\p{C}", "");)或使用@阿文德的答案删除所有控制字符和修剪看了那么之前的字符串(thisLine = thisLine.trim();)它不包含空格在一开始还是很字符串的结尾。

编辑:记事本不会显示大多数'特殊'字符。如果您想编辑文件,请尝试使用十六进制编辑器或Notepad ++等更高级的记事本。

+0

我正在寻找一种程序化的方式来删除它们。修剪不起作用。 – WVrock

+0

'my_string.replaceAll(“\\ p {C}”,“”);'工作吗? – Buurman

+0

它的工作表示感谢。但那个角色从哪里来?我用编程方式编写了文本。 – WVrock

2

尝试之前截断空格:

thisLine = thisLine.trim(); 
System.out.println(thisLine 
     + " -- First char : (" + thisLine.charAt(0) 
     + ") - starts with ! : " 
     + thisLine.startsWith("!")); 
+0

修剪失败。 – WVrock

0

忽略第一行,如果它是空的..

如果你正在读一个循环线做象下面这样:

thisLine = thisLine.trim(); 
if (thisLine.isEmpty()) { 
    continue; 
} 
// Remaining logic here including sysout 
+0

它不是空的它是'!使用 !添加评论。开始的行!没有阅读.' – WVrock

+0

好吧,那么只是修剪应该工作。相应地更新我的答案 –

0

使用以下代码可以确定线的第一个字符是什么以及线的长度:

System.out.println(thisLine 
    + " -- First char : (" + ((int)thisLine.charAt(0)) 
    + ") - Line length: " + thisLine.length()); 
+0

它是'65279'记事本没有显示任何东西。 – WVrock

+0

在这种情况下,它可能是最好的解决方案,总是修剪()你处理它之前阅读的行(像@ Arvind已经提到) – dosw

1

同意@Arvind的说法。它应该解决这个问题,如果字符串具有领先的空格。

但是,永远记住,startsWith(字符串ARG)如果传递的arg是“”(空字符串)

source: Javadocs