2015-07-20 140 views
0

所以我想將字母或數字添加到字符列表中?我不想有任何空間或。或者,或?或任何其他標誌。我只想要純數字和字母。我的部分代碼如下:如何僅從Java文本文件中讀取字母(a-z || A-Z)和數字(0-9)字符?

while((r = br.read()) != -1){ 
    char c = (char) r; 
    if (!((c == ' ') || (c == ',') || (c == '.') || (c == '?'))) 
     output.add(c); 
} 

您可以看到我已經添加了一個if語句,用於檢查空格或或。要麼 ? 有沒有任何有效的方法來做到這一點?所以我不需要在聲明中包括所有的標誌,因此使它更長。

+0

有'Character.is的整個負載*'方法 - 也許'Character.isAlphabetic'和'isDigit'是你在找什麼。 –

+0

您可以爲此創建一個正則表達式,這將降低代碼的複雜度。 – proudandhonour

+0

您可以測試數字和a-z |的ASCII範圍A-Z字母。這樣你將過濾所有不是數字或字母的東西。 – John

回答

4

如果你檢查它字符一個字符,它會很容易檢查什麼允許的,而比什麼都不是,特別是因爲你的標準只有三個範圍:0-9,az和AZ。例如:

if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { 
    output.add(c); 
} 

正如你所看到的,它不是最漂亮的代碼,這就是爲什麼它會是更好地使用Java的內置Character.is?方法:

if (Character.isDigit(c) || Character.isLetter(c)) { 
    output.add(c); 
} 

然而,如果你能閱讀字符串,你可以使用正則表達式,因此對其進行合法性檢查:

if (s.matches("[0-9A-Za-z]*")) { 
    output.add(s); 
} 

這隻會添加字符串,如果它包含零個或多個數字和大寫或小寫字母,在任何序列。當然,您可以將此解決方案用於單字符字符串,儘管它不太受歡迎(對於字符,您最好使用Character類)。

2

試試這個

if (Pattern.compile("[A-Za-z0-9]").matcher(String.valueOf(c)).matches()) { 
    output.add(c); 
} 
相關問題