2015-06-25 199 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