如何只用Java在文本文件中读取字母(a-z || A-Z)和数字(0-9)字符?

时间:2015-07-20 05:04:11

标签: java

所以我想在字母列表中添加字母或数字?我不想要任何空格或。或者,或?或任何其他标志。我只想要纯数字和字母。我的部分代码如下:

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

你可以看到我添加了一个检查空格的if语句,或者。要么 ? 有没有有效的方法来做到这一点?因此,我不必在声明中包含所有符号,因此,使其更长。

3 个答案:

答案 0 :(得分: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类)。

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:1)

试试这个:

while((r = br.read()) != -1){
     char c = (char) r;
     if (Character.isDigit(c) || Character.isLetter(c)) { 
         output.add(c);
     }
}

您可以参考此链接How to check if a character in a string is a digit or letter