如果代码中没有数字,则返回true的方法

时间:2015-03-09 22:01:14

标签: java arrays string for-loop

 package code;
 public class WriteUp{

 public boolean containsNoDigits(String s){
    s  = s.toLowerCase();
    char[] n = {'0', '1', '2', ....., '9'} //i wrote out 0-9
    for (int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            if (c == n[i]);
                  return false; //if string contain digit
    }
    return true; //if string contain NO digit
 }
 }

我想编写一个方法(使用Array)来检查我的字符串是否包含数字。 digit =&gt;假;没有数字=&gt;真;

我的代码无法通过JUnit测试

JUnit测试:

  @Test
  public void test(){
        code.WriteUp wu = new code.WriteUp();
        boolean expected = true;
        boolean actual = wu.containsNoDigits("there is no digit")
        assertTrue("", expected ==actual);
  }

  @Test
  public void test01(){
        code.WriteUp wu = new code.WriteUp();
        boolean expected = false;
        boolean actual = wu.containsNoDigits("there are digit, 0342432")
        assertTrue("", expected ==actual);
  }

如何修复代码以使其正常工作

4 个答案:

答案 0 :(得分:4)

分号终止块,将其删除

if (c == n[i]); // <-- here
    return false;

实际上是

if (c == n[i]); // <-- here
return false;

你需要类似的东西(最好有大括号)

if (c == n[i]) {
    return false;
}

if (c == n[i])
    return false;

此外,正则表达式会更有效。像

public boolean containsNoDigits(String s){
    return !s.matches("\\d"); // <-- digit pattern
} 

答案 1 :(得分:2)

这应该有效:

public boolean hasDigit(String x){
    for (char c : x.toCharArray())
        if (Character.isDigit(c))
            return false;
    return true;
}

您可以使用字符数组轻松遍历字符串中的所有字符,并使用函数 Character.isDigit(c)轻松检查每个字符。这可能是最简单易读的。

希望这有帮助。

答案 2 :(得分:1)

Java的Character类包含一个静态方法,用于检查字符是数字的天气。 Character.isDigit(char ch)会为你做这件事。

使用此方法的代码可能是

public boolean hasNoDigits(String s){
   for(int i=0;i<s.length();i++){
       if(Character.isDigit(s.charAt(i))){
           return false;
       }
   }
   return true;
}

如果您只希望方法返回false,如果字符串包含标准拉丁数字0 through 9\u0030\u0039),则可以将您的代码修改为:

public boolean hasNoDigits(String s){
   for(int i=0;i<s.length();i++){
       char atIndex=s.charAt(i);
       if(atIndex >= '0' && atIndex <= '9'){
           return false;
       }
   }
   return true;
}

此更改的原因是Character.isDigit(char ch)在按Unicode分类为数字的所有字符上都返回true。

  

包含数字的一些Unicode字符范围:

     
      
  • &#39; \ u0030&#39;通过&#39; \ u0039&#39;,ISO-LATIN-1数字(&#39; 0&#39;到&#39; 9&#39;)
  •   
  • &#39; \ u0660&#39;通过&#39; \ u0669&#39;,阿拉伯语 - 印度数字
  •   
  • &#39; \ u06F0&#39;通过&#39; \ u06F9&#39;,扩展阿拉伯语 - 印度数字
  •   
  • &#39; \ u0966&#39;通过&#39; \ u096F&#39;,梵文数字
  •   
  • &#39; \ uFF10&#39;通过&#39; \ uFF19&#39;,全空数字
  •   

这意味着包含此或此的字符串将返回true。

答案 3 :(得分:0)

在仔细阅读我的代码后,我能够知道为什么我搞砸了并找出了解决方案。

   public boolean containsNoDigits(String s) {
    s = s.toLowerCase();
    char[] n = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c == n[0] || c == n[1] || c == n[2] || c == n[3] || c == n[4] || 
                c == n[5] || c == n[6] || c == n[7] ||  c == n[8] || c == n[9]) {
            return false; // if s has no digit
        }
    }
    return true; // if s has digit
}

感谢您提供更短,更高效的解决方案。我是初学者因此我尽可能地编写了我的代码,这个解决方案使我能够更好地理解使用数组。