【问题标题】:Using if/else statements against a Range对范围使用 if/else 语句
【发布时间】:2019-03-18 17:03:03
【问题描述】:

我使用的代码应该识别某物是否是数字、字母等,并返回正确的响应。

我遇到了无法在 char 上使用布尔值的错误,因此我将输入 char 转换为字符串。

现在我正在使用下面的代码,但我不能在字符串上使用数学运算符。我需要使用 char 作为输入 b/c 程序应该能够识别字母和特殊字符。

我可以改用范围吗?即“1-9”和“a-z”?我已经尝试过多种功能([1-9]、“[1-9]”等),但我不断收到错误消息。我的猜测是我的格式不正确。

package charreader; 

import java.util.Scanner;
import java.io.*;

public class Charreader {

public static void main(String[] args) throws IOException 
{

Scanner newScan = new Scanner(System.in); 

//prompt for input and read it
System.out.println("Enter a character.");
char ch = (char)System.in.read();

//convert ch to string
String st = String.valueOf(ch);

if (st >= 1 && <= 9 )
{
    System.out.println("Digit");
}

else 
{
   System.out.println("Not a digit.");
}

我唯一要做的就是:

if (st == '0')
{
    System.out.println("Digit");
}

else 
{
   System.out.println("Not a digit.");

但我不想这样运行整个程序。这将是笨拙的并且通常是不好的做法。

【问题讨论】:

  • 您可能希望包含您遇到的确切错误,而不是仅仅说您遇到了错误。另请注意,无法使用&gt;=&lt;= 比较字符串,也不能像您那样将字符串与字符进行比较(您的第二个示例不能与您已使其工作的陈述相反)。
  • Java 没有内置的“范围”
  • 无论如何,这可能与您的问题重复:stackoverflow.com/questions/5034580/comparing-chars-in-java
  • 您可以轻松使用Character.isDigit(ch);进行检查

标签: java string if-statement range


【解决方案1】:

您似乎只想检查它是否为正数。 你可以使用:

Character.getNumericValue()

如果不是数字则返回-1,如果不是非负整数则返回-2。所以是这样的:

char ch = (char)System.in.read();
if(ch.getNumericValue() > 0){ 
//"is a pos int"
} else { 
//"not a pos int
}

【讨论】:

  • 请注意,这也将识别来自其​​他脚本的数值,这与问题中的原始范围“1”-“9”相反。例如Character.getNumericValue('Ⅼ') 返回 50(Ⅼ 是 unicode 罗马数字 50 (U+216C))
【解决方案2】:

在 java 中,我们有内置的方法。像这些字符:

char a = 'b';
Character.isDigit(a);
Character.isLetter(a);

即使是字符串,你也可以使用这些方法:

public static boolean isNumeric(String str) {
   try {
       int number = Integer.parseInt(str);
       return true;
   } catch (Exception e) {
       return false;
   }
}

编辑:如果你不想使用 Character 类,我们可以这样做:

char ch = 'r';
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    System.out.println("alphabetic");
else if(ch >= '0' && ch <= '9')
    System.out.println("digit");
else
    System.out.println("none");

【讨论】:

  • 使用 isDigit 等会使一切变得更加容易,但严格禁止使用上述提示。 (对不起,早该提到)
  • 请注意isDigit() 也可以识别其他脚本中的数字(请参阅文档)
  • 所以你可以使用 if(ch >= 'a' && ch = '0' && ch
【解决方案3】:

您可以使用正则表达式来获得结果。 我建议您阅读 this 文章,因为他们解释了如何在 Java 中使用正则表达式。

您也可以直接将 char 转换为 int,而不是将 char 转换为 string。 示例:

char c='1';  
int a=Character.getNumericValue(c); 

函数 getNumericValue 将返回一个数字。您需要记住,如果 char 不是数字,它将引发错误。

要记住的最后一件事是,在 Java 中,您对 String 使用单引号 ('/'),​​对 char 使用双引号 ("/")。

【讨论】:

    【解决方案4】:

    Java 中不存在范围。 而是使用:

    if ((symbol >= 'A' && symbol <= 'Z') || symbol == '?') {
    // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多