вернуть true, если букв нет - PullRequest
       1

вернуть true, если букв нет

1 голос
/ 25 февраля 2012

Этот метод является одним из нескольких. Мне было интересно, если я прав в строке здесь, которая говорит "if (dig1.contains () && dig2.contains () && res.contains ())". в регулярном выражении 1. Мне нужно убедиться, что в строке нет букв 2. Мне нужно посмотреть, складывается ли сумма строк1 и строк2 в третью строку. иначе вернуть ложь. Спасибо за вашу помощь. Это так далеко, что у меня есть.

/**
  Returns true if the puzzle is solved.
  @return true if the puzzle has no letters and the 
  first two numbers add up to the third
*/
public boolean isSolved()
{
   String dig1=""+add1;
   String dig2=""+add2;
   String res=""+result;
   //String a1=""+dig1;
   if(dig1.contains("[^A-Z]") && dig2.contains("[^A-Z]") && res.contains("[^A-Z]")){
      int i=Integer.parseInt(dig1);
      int j=Integer.parseInt(dig2);
      int k=Integer.parseInt(res);

        if(i+j==k)
            return true;
        else
            return false;
     }
   else
       return false;

}

Ответы [ 5 ]

4 голосов
/ 25 февраля 2012

Я бы предложил вам использовать другое регулярное выражение. Он проверит, содержат ли ваши строки только цифры:

if (dig1.matches("^[0-9]*$")
    && dig2.matches("^[0-9]*$")
    && res.matches("^[0-9]*$"))

С вашим текущим кодом вы получите исключения во многих случаях, например, когда есть строчные буквы.

4 голосов
/ 25 февраля 2012

Зачем вам использовать регулярные выражения для этого?Integer.parseInt() выдаст исключение, если преобразование невозможно.Просто поймайте исключение, и тогда вы поймете, что строки содержат что-то еще, кроме цифр.Что-то вроде этого:

public boolean isSolved() {
    try {
        int i = Integer.parseInt(dig1);
        int j = Integer.parseInt(dig2);
        int k = Integer.parseInt(res);
        return (i+j) == k;
    }
    catch (NumberFormatException e) {
        return false;
    }
 }
2 голосов
/ 25 февраля 2012

Я бы порекомендовал это решение

public boolean isSolved() {
    try {
        int dig1 = Integer.parseInt(add1);
        int dig2 = Integer.parseInt(add2);
        int res = Integer.parseInt(result);

        return dig1 + dig2 == res;
    } catch (NumberFormatException ex) {
        return false;
    }
}

В случае, если все строки являются числами, преобразование выполняется правильно, а затем вы можете сравнить числа. В случае, если один из символов содержит буквы или другие недопустимые символы, генерируется исключение и возвращается false.

2 голосов
/ 25 февраля 2012

Нет, это сложный способ преобразования строки в целое число. (если это то, что вы спрашиваете)

public boolean isSolved()
{
   String dig1=""+add1;
   String dig2=""+add2;
   String res=""+result;
   try{
      int i=Integer.parseInt(dig1);
      int j=Integer.parseInt(dig2);
      int k=Integer.parseInt(res);

     if((i+j)==k) return true;
     return false;
   } catch {
     return false;
   }
}

Итак, вы можете просто обернуть это в блок try / catch, тогда вам не нужно использовать регулярные выражения для предварительной проверки строк.

Я добавил свой дополнительный комментарий здесь: если вы собираетесь использовать это повсеместно, рефакторинг его в метод:

private boolean IsOnlyNumbers( String input ){ 
  try{ 
    Integer.parseInt(input); 
    return true; 
  } catch { 
    return false;
  }
}

или, так как вам нужен номер, вы можете сделать это:

private int GetNumber( String input ){ 
  try{ 
    return Integer.parseInt(input); 
  } catch { 
    return -1;
  }
}

и затем проверьте:

var dig1 = GetNumber(add1);
var dig2 = GetNumber(add2);
var res = GetNumber(add2);
if( dig1 > 0 && dig2 > 0 && dig3 > 0 ) return dig1+dig2 == res;
2 голосов
/ 25 февраля 2012

Вы можете иметь оператор try-catch:

try {
    int i=Integer.parseInt(dig1);
    int j=Integer.parseInt(dig2);
    int k=Integer.parseInt(res);

    if(i+j==k)
        return true;
    else
        return false;
    }
} catch (NumberFormatException numForEx) {
    return false;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...