2013-05-19 1 views
0

Как написать код ниже, не используя регулярное выражение?Перевод регулярного выражения в базовый код

public static boolean validateCode(String code){ 
    boolean hasAtLeastOneNumber = Pattern.compile("[0-9].*[0-9]") 
             .matcher(code).find(); 

    boolean hasAtLeastTwoLetters = Pattern.compile("[a-zA-Z].*[a-zA-Z]") 
              .matcher(code).find(); 

    boolean hasAtLeastOneHyphen = Pattern.compile("-") 
             .matcher(code).find(); 
} 
+0

, когда вы говорите «классический» код, какие механизмы String вы хотите ограничить? Можно ли использовать 'contains' и/или' startsWith', или вы буквально пытаетесь разобрать символы целиком в домашних испеченных методах? –

+0

im новый студент, который буквально пытается разобрать персонажей полностью в домашних испеченных методах, это единственное, что мне осталось сделать, чтобы закончить мой домашний бизнес, я просто не знаю, как – Agustin

+0

о, а затем проигнорируйте мой ответ ... Я буду отредактируйте его –

ответ

4

Как насчет

public static boolean validateCode2(String code) { 
    int numbers = 0, letters = 0, hyphens = 0; 
    for (char c : code.toCharArray()) { 
     if (Character.isDigit(c)) numbers++; 
     if (Character.isAlphabetic(c)) letters++; 
     if (c=='-') hyphens++; 
    } 

    return numbers>=2 && letters>=2 && hyphens>=1; 
} 
+0

. Я закончил с этим, спасибо большое – Agustin

+0

Добро пожаловать :) – Pshemo

3

Для hasAtLeastOneNumber:

for (char c : code.toCharArray()) { 
    if (Character.isDigit(c)) { 
     return true; 
    } 
return false; 

Для hasAtLeastTwoLetters:

int numFound = 0; 
for (char c : code.toCharArray()) { 
    if (Character.isLetter(c)) { 
     numFound++; 
     if (numFound >= 2) { 
      return true; 
     } 
    } 
} 
return false; 

Для hasAtLeastOneHyphen:

for (char c : code.toCharArray()) { 
    if (c == '-') { 
     return true; 
    } 
} 
return false; 

Если вы не хотите использовать toCharArray, вы можете использовать:

for (int i=0; i<code.length(); i++) { 
    char c = code.charAt(i); 
    // do the rest of the test here 
} 

Это в основном эквивалентно использованию toCharArray за исключением того, что это немного более запутанным: кто-то, кто смотрит на код должен был бы занять второе или два чтобы понять это. С toCharArray очевидно, что вы делаете.

+0

Я не могу использовать массивы: S – Agustin

+0

Что вы можете * использовать * Вы можете обернуть это в вызовы 'charAt', но это глупо. – wchargin

+0

Что вы имеете в виду, оберните его в charAt, я узнал charAt, но я havent узнал массивы – Agustin

1

Вы можете перебрать строку и проверить его на диапазоны символов. См. Пример на IDEONE или спросите меня, нужно ли вам объяснение.

import java.util.*; 
import java.lang.*; 

class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     System.out.println(validarCodigo("No-numbers")); 
     System.out.println(validarCodigo("1-A")); 
     System.out.println(validarCodigo("This 1 Matches -- :-)")); 
    } 

    public static boolean validarCodigo(String codigo) { 
     int i; 
     char[] chars = codigo.toCharArray(); 
     char current; 
     boolean tieneAlmenosUnNumero = false; 
     boolean tieneAlmenosDosLetras = false; 
     boolean tieneAlmenosUnGuion = false; 

     // Check for at least one number 
     for (i=0; i<chars.length; i++) { 
      current = chars[i]; 
      if (current >= '0' && current <= '9') { 
       tieneAlmenosUnNumero = true; 
       break; 
      } 
     } 

     // Check for at least two letters 
     int found = 0; 
     for (i=0; i<chars.length; i++) { 
      current = chars[i]; 
      boolean lower = current >= 'a' && current <= 'z'; 
      boolean upper = current >= 'A' && current <= 'Z'; 

      if (lower || upper) found++; 

      if (found == 2){ 
       tieneAlmenosDosLetras = true; 
       break; 
      } 
     } 

     // Check for at least one hyphen 
     for (i=0; i<chars.length; i++) { 
      current = chars[i]; 
      if (current == '-') { 
       tieneAlmenosUnGuion = true; 
       break; 
      } 
     } 


     return tieneAlmenosUnNumero && tieneAlmenosDosLetras && tieneAlmenosUnGuion; 
    } 
} 
Смежные вопросы