Как поставить исключение только для строкового значения? - PullRequest
0 голосов
/ 12 июня 2018

Я беру ввод от пользователя, и он должен быть только строкой, но код работает не так, как я ожидал.Вот мой код `

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 голосов
/ 12 июня 2018

Если вы только пытаетесь проверить, не является ли строка НЕ ​​числом, вы можете попробовать

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

, но этот метод не будет работать, если у вашего числа есть десятичное число или что-то еще.

check Как проверить, является ли строка числовой в Java

для аналогичного ответа

0 голосов
/ 12 июня 2018
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;
          }
0 голосов
/ 12 июня 2018

проверить, не является ли строка не таким числом:

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;
}
0 голосов
/ 12 июня 2018

Если вы попытаетесь проанализировать целое число напрямую, вы получите более значимое исключение для перехвата.

String str = "";
Scanner sc = new Scanner(System.in);
while (true) {
    try {
        System.out.print("Enter test string");
        str = sc.nextLine();
        Integer.parseInt(str);
        System.out.println("Please enter String value");
    } catch (NumberFormatException e) {
        // You *didn't* get a number; you actually have a String now.
        // You can terminate the loop here.
        break;
    }
}
System.out.println(str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...