Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果没有字母,则返回true_Java_Regex - Fatal编程技术网

Java 如果没有字母,则返回true

Java 如果没有字母,则返回true,java,regex,Java,Regex,这种方法是几种方法之一。我想知道我在这里说ifdig1.contains&&dig2.contains&&res.contains的行是否正确。在正则表达式中 1.我需要确保字符串中没有字母 2.我需要看看string1和string2的总和是否等于第三个字符串。否则返回false。谢谢大家的帮助。到目前为止,这就是我所拥有的 /** Returns true if the puzzle is solved. @return true if the puzzle has no lette

这种方法是几种方法之一。我想知道我在这里说ifdig1.contains&&dig2.contains&&res.contains的行是否正确。在正则表达式中 1.我需要确保字符串中没有字母 2.我需要看看string1和string2的总和是否等于第三个字符串。否则返回false。谢谢大家的帮助。到目前为止,这就是我所拥有的

/**
  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;

}您可以使用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;
} 

您可以使用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;
} 

为什么要使用正则表达式呢?如果无法进行转换,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;
    }
 }

为什么要使用正则表达式呢?如果无法进行转换,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;
    }
 }

不,这是一种将字符串转换为整数的复杂方法。如果这就是你要问的

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块中, 然后,您不必事先使用正则表达式检查字符串

我在这里添加了我的addtl注释:如果您打算到处使用它,请将其重构为一个方法:

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;

不,这是一种将字符串转换为整数的复杂方法。如果这就是你要问的

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块中, 然后,您不必事先使用正则表达式检查字符串

我在这里添加了我的addtl注释:如果您打算到处使用它,请将其重构为一个方法:

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;

我推荐这个解决方案

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。

我建议使用此解决方案

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。

我建议您使用另一个正则表达式。它将检查字符串是否仅包含数字:

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

使用当前代码,在许多情况下都会出现异常,例如,当有小写字母时。

我建议您使用另一个正则表达式。它将检查字符串是否仅包含数字:

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


使用当前代码,在许多情况下都会出现异常,例如,当有小写字母时。

如果字符串包含除数字和字母以外的其他符号,该怎么办?您将获得NumberFormatException。不,它完全是数字和字母。输入如下:add1=SJF3G add2=SDFH3 result=3SH4H。没有符号或其他任何东西。谢谢你的帮助。还有一件事。我注意到您倾向于这样做:stringdig1=+add1;。如果您想连接字符串,只需执行stringdig1+=add1;或者,如果要将一个字符串分配给另一个字符串,请执行此字符串dig1=add1;若字符串包含除数字和字母以外的其他符号,会怎么样?您将获得NumberFormatException。不,它完全是数字和字母。输入如下:add1=SJF3G add2=SDFH3 result=3SH4H。没有符号或其他任何东西。谢谢你的帮助。还有一件事。我注意到您倾向于这样做:stringdig1=+add1;。如果您想连接字符串,只需执行stringdig1+=add1;或者,如果要将一个字符串分配给另一个字符串,请执行此字符串dig1=add1;谢谢你Jon我感谢你的帮助谢谢Jon我感谢你的帮助谢谢mindandmedia的帮助。我感谢你的帮助,非常欢迎。既然你很有礼貌,这里还有另一个建议:将整个过程变成一个函数:私有布尔containsNoLetters字符串输入{try{Integer.parseIntinput;return true;}catch{return false};然后你可以重复使用它…感谢mindandmedia的帮助。我感谢你的帮助,非常欢迎。既然你很有礼貌,这里还有另一个建议:将整个过程变成一个函数:私有布尔containsNoLetters字符串输入{try{Integer.parseIntinput;return true;}catch{return false};然后你可以重新使用它…谢谢你托马斯先生的帮助。谢谢你托马斯先生的帮助。非常感谢你的帮助。我很感激。非常感谢你的帮助。我很感激。谢谢你的帮助,斯特兰捷夫先生。谢谢你的帮助。谢谢你的帮助,斯特兰捷夫先生。谢谢你的帮助。