问题描述
所以我想将字母或数字添加到字符列表中吗? 我不想有任何空格或。 或,或? 或其他任何标志。 我只想要纯数字和字母。 我的部分代码如下:
while((r = br.read()) != -1){
char c = (char) r;
if (!((c == ' ') || (c == ',') || (c == '.') || (c == '?')))
output.add(c);
}
您可以看到我添加了一个if语句,用于检查空格或或。 要么 ? 有什么有效的方法可以做到这一点吗? 这样我就不必在声明中包含所有符号,因此可以使其更长。
1楼
如果你检查它字符一个字符,它会很容易检查什么是允许的,而不是什么不是,特别是因为你的标准只有三个范围: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);
}
3楼
尝试这个:
while((r = br.read()) != -1){
char c = (char) r;
if (Character.isDigit(c) || Character.isLetter(c)) {
output.add(c);
}
}
您可以参考此链接。