2015-07-20 142 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); 
} 
相关问题