字符串以空字符串(“”)开头

时间:2015-06-25 11:11:52

标签: java string text

我的程序正在读取文本文件并根据文本执行操作。但是文本的第一行是有问题的。显然它以“”开头。这会弄乱我的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

为什么会发生这种情况,我该如何解决这个问题?我希望它意识到该行以“!”开头不是“”

5 个答案:

答案 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

source: Javadocs

答案 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());