我的程序正在读取文本文件并根据文本执行操作。但是文本的第一行是有问题的。显然它以“”开头。这会弄乱我的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
为什么会发生这种情况,我该如何解决这个问题?我希望它意识到该行以“!”开头不是“”
答案 0 :(得分:4)
将我和其他人的评论收集到后代的一个答案中,你的字符串可能包含不可打印的控制字符。试试
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}", "");
)或使用@ arvind的答案并在读取之前修剪字符串(thisLine = thisLine.trim();
),使其不包含空格在字符串的开头或结尾。
编辑:记事本不会显示大多数“特殊”字符。如果要编辑文件,请尝试使用十六进制编辑器或更高版本的记事本,例如Notepad ++。
答案 1 :(得分:2)
尝试在截断之前截断空格:
thisLine = thisLine.trim();
System.out.println(thisLine
+ " -- First char : (" + thisLine.charAt(0)
+ ") - starts with ! : "
+ thisLine.startsWith("!"));
答案 2 :(得分:1)
同意@Arvind所说的话。如果字符串有前导空格,它应该解决问题。
但是,请记住,如果传递的arg为“”(空字符串),则startsWith(String arg)返回true
答案 3 :(得分:0)
如果第一行为空,则忽略第一行..
如果您正在循环中读取行,请执行以下操作:
thisLine = thisLine.trim();
if (thisLine.isEmpty()) {
continue;
}
// Remaining logic here including sysout
答案 4 :(得分:0)
使用以下代码查看该行的第一个字符是什么以及该行的长度:
System.out.println(thisLine
+ " -- First char : (" + ((int)thisLine.charAt(0))
+ ") - Line length: " + thisLine.length());