检查输入字段是否包含数字和字符

时间:2015-03-04 14:21:43

标签: java input-field checkvalidity

Heyho伙计们!

我有一些街道字段,通常应包括门牌号,所以我想检查字段是否包含字符和数字(0-9)。如果两者都正确,则输入正确。顺便说一句,我不想​​使用正则表达式。当有人可以帮助我时,会很棒。我不知道如何检查它。

感谢。

我尝试了用户输入,我测试了铁路10

System.out.println("Street:");
strasse = input.readLine();

while(true) {
while (strasse.length() > 35) {
      System.out.println("Input has a limit of 35 signs. Enter again:");
   }

   for (int i = 0; i < strasse.length(); i++) {

      if (Character.isDigit(strasse.charAt(i))) {
         checkDigit = true;
      }
      else if (Character.isLetter(strasse.charAt(i))) {
         checkLetter = true;
      }

      if (checkDigit && checkLetter == true) {
         break;
      }
      else { // <= PROBLEM. You should give a chance to test all chars from address     
        System.out.println("Must contain at least 1 number or character. Enter again:");
        strasse = input.readLine();
      } 
   }
}

它没有为checkDigit提供真正的回复。

2 个答案:

答案 0 :(得分:2)

如果您对街道地址格式没有任何限制,只想检查是否至少有一个字符编号和一个字母字符,那么您可以选择

boolean checkAddress(String address) {
   boolean hasDigit = false;
   boolean hasLetter = false;
   for (int i = 0; i < address.length(); i++) {
      if (Character.isDigit(address.charAt(i))) {
         hasDigit = true;
      }
      else if (Character.isLetter(address.charAt(i))) {
         hasLetter = true;
      }
   }
   return hasDigit && hasLetter;
}

修改 有一个关闭&#34;)&#34;失踪。 我测试了:

System.out.println(checkAddress("aksjdbakjs, 90."));  // => true  
System.out.println(checkAddress("aksjdbakjs asd asd")); // => false
System.out.println(checkAddress("...90.;;;")); // => false

<强> EDIT2 提供代码的建议解决方案

System.out.println("Street:");
strasse = input.readLine();
boolean strasseIstRecht = false;    

while(!strasseIstRecht) {
   if (strasse.length() > 35) {
      System.out.println("Input has a limit of 35 signs. Enter again:");
   }
   else {
      // re-initialise for each new input
      boolean checkDigit = false;
      boolean checkLetter = false;

      for (int i = 0; i < strasse.length(); i++) {
         if (Character.isDigit(strasse.charAt(i))) {
            checkDigit = true;
         }
         else if (Character.isLetter(strasse.charAt(i))) {
            checkLetter = true;
         }

         if (checkDigit && checkLetter) {
            strasseIstRecht = true;
            break; // ok address has both no need to continue the for
         } 
      }
      // Now check if we need to ask a new strasse
      if (!strasseIstRecht) { 
        System.out.println("Must contain at least 1 number or character. Enter again:");
        strasse = input.readLine();
      }
   }
}

您可以先将strasse = input.readLine();放在while(...)之后,然后删除上面代码中完成的两行,从而简化操作。

答案 1 :(得分:1)

char[] addressArray = address.toCharArray();
Boolean goodValue = false;
Boolean foundSpace = false;
for (char ch : addressArray) 
{
    if(!foundSpace)
         {
             if(!((int)ch >= 48 && (int)ch <= 57)) break;
         }
    else if((int)ch >= 97 && (int)ch <=122) 
          {
               goodValue = true;
               break;
          } 
    if(ch==' ')foundSpace=true;    
}

这非常粗糙,但可以给你一个想法。基本上它会在空格之前测试地址中的所有字符以查看它们是否为数字,然后在空格之后,它会查找至少一个字母。