如何只为字符串值设置异常?

时间:2018-06-12 18:30:55

标签: java string exception exception-handling

我正在接受用户的输入,它应该只是字符串,但代码不能按我的预期工作。这是我的代码`

while(true){
    try{
      System.out.print("Enter test string");
      str=sc.nextLine();
      break;
    }
    catch(InputMismatchException e) {
     System.out.println("Please enter String value");
     continue;
    }
  }
  System.out.println(str);
`

如果我给出的整数值应该再次询问,但这里是打印整数值。也没有特殊字符

4 个答案:

答案 0 :(得分:1)

如果你试图直接解析整数,那么你会得到一个更有意义的异常来捕获。

N = 1/2
M = 5

x1 = seq(0, 1, by = N)

df = data.frame(x1)

for(i in 1:(M-2)){

  x_next = sapply(rowSums(df), function(x){seq(0, 1-x, by = N)})
  df = data.frame(sapply(df, rep, sapply(x_next,length)))
  df = cbind(df, unlist(x_next))

}

x_next = sapply(rowSums(df), function(x){1-x})
df = sapply(df, rep, sapply(x_next,length))
df = data.frame(df)
df = cbind(df, unlist(x_next))

> df
    x1 unlist.x_next. unlist.x_next..1 unlist.x_next..2 unlist(x_next)
1  0.0            0.0              0.0              0.0            1.0
2  0.0            0.0              0.0              0.5            0.5
3  0.0            0.0              0.0              1.0            0.0
4  0.0            0.0              0.5              0.0            0.5
5  0.0            0.0              0.5              0.5            0.0
6  0.0            0.0              1.0              0.0            0.0
7  0.0            0.5              0.0              0.0            0.5
8  0.0            0.5              0.0              0.5            0.0
9  0.0            0.5              0.5              0.0            0.0
10 0.0            1.0              0.0              0.0            0.0
11 0.5            0.0              0.0              0.0            0.5
12 0.5            0.0              0.0              0.5            0.0
13 0.5            0.0              0.5              0.0            0.0
14 0.5            0.5              0.0              0.0            0.0
15 1.0            0.0              0.0              0.0            0.0

答案 1 :(得分:0)

检查字符串是否不是这样的数字:

while(true){
        try{
            System.out.print("Enter test string");
            str=sc.nextLine();

            if(isNumeric(str)) {
                continue;
            }
            break;
        }
        catch(InputMismatchException e) {
            System.out.println("Please enter String value");
            continue;
        }
    }
    System.out.println(str);
}

public static boolean isNumeric(String str)
{
    for (char c : str.toCharArray())
    {
        if (!Character.isDigit(c)) return false;
    }
    return true;
}

答案 2 :(得分:0)

如果您只是想检查字符串是否不是数字,可以尝试

String str = sc.nextLine();
if (StringUtils.isNumeric(str))
    System.out.println(str);

但如果您的号码有小数或其他内容,则此方法无效。

检查How to check if a String is numeric in Java

获得类似答案

答案 3 :(得分:-1)

str=sc.nextLine();

将所有内容都作为字符串,因此没有异常。尝试使用像这样的语句

int num; 
  &
num=sc.nextInt();

你会发现异常会被捕获,所以代码没有问题。

假设用户将输入"This is 1 String",即使它包含整数但仍然是一个字符串。即使用户输入"43728"它仍被视为字符串

,每次都同样适用

以下是如何实现目标

while(true){
              System.out.print("Enter test string");
              str=sc.nextLine();
              Pattern pattern = Pattern.compile("\\d");
              Matcher matcher = pattern.matcher(str);
              if (matcher.find()) {
                  //System.out.println(matcher.group(0));
                 continue; 
              }
              break;
          }