0

嘿嘿伙计们!

我有一些街道字段,通常应该包括门牌号码,所以我想检查该字段是否包含字符和数字(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 提供真正的回报。

4

2 回答 2

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;
}

编辑 缺少一个结束的“)”。我测试过:

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(...)并删除上面代码中完成的两行来简化一点。

于 2015-03-04T14:43:20.157 回答
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;    
}

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

于 2015-03-04T14:45:01.460 回答