2015-03-04 3 views
0

Heyho guys!Проверьте поле ввода, если оно содержит цифры и символы

У меня есть поле улицы, которое обычно должно содержать номер дома, поэтому я хочу проверить поле, если оно содержит символы и цифры (0-9). Если оба правильные, вход правильный. Btw, я не хочу использовать регулярное выражение. Было бы замечательно, когда кто-то мог мне помочь. Я не знаю, как это проверить.

Спасибо.

Я попытался это с пользовательским вводом, я тестировал на железную дорогу 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.

+0

Почему бы не использовать 'Regex'? можете ли вы предоставить образец данных? –

+0

Пример данных? Что вы имеете в виду? Я хочу знать, возможно ли это и без регулярного выражения. – CallMeBronxy

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

EDIT Было закрытие ")" пропавших без вести. я тестировал с:

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(...) и удаления обеих линий, где это сделано в код выше.

+0

Спасибо, им это проверит. – CallMeBronxy

+0

Я тестировал его, но не работал. Im собираюсь скопировать мой источник в открывающийся поток, я не использовал дополнительный метод для него, но я отлаживал источник, и он не возвращает true для цифры, когда вводится цифра. – CallMeBronxy

+0

ops, я сделал что-то не так: D я добавил сообщение. – CallMeBronxy

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

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

+0

Вы должны полагаться на класс 'Character', который предоставляет вспомогательные функции для проверки семейства символов. И 'String $ toCharArray()' делает _copy_ символов в строке, которая не нужна. –

+0

Я согласен с вами в этом вопросе и попытаюсь отредактировать мой ответ. – scubasteve623

 Смежные вопросы

  • Нет связанных вопросов^_^