2013-08-03 5 views
2

То, что я пытаюсь сделать, это поставить символ @ перед доменом. Я также пытаюсь выяснить, как поставить домены в число последних 4 символов (пример .com). Как мне это сделать? Любая помощь будет оценена по достоинству.Как поставить определенный символ перед определенной строкой?

Я перечислил свою работу на этом link.

Код по ссылке:

import java.util.Scanner; 

public class Username { 

     public static void main(String[] args) { 
       Scanner keyboard = new Scanner(System.in); 

       System.out.println("Must be between 8 and 20 characters."); 
       System.out.println("Must contain at least one uppercase and lowercase letter."); 
       System.out.println("Must contain at least one digit. "); 
       System.out.println("Must contain a special character ] [ ?/< ~ # ! $ %^& * () + = } | : ; , > { "); 
       System.out.println("Must contain @ before the domain"); 
       System.out.println("The only acceptable domains are .com .edu .org .mil .gov .net"); 
       System.out.println("\\n____Please enter your username to access the page. Follow the rules above.____ "); 

       String input = keyboard.nextLine(); 
       while ((input.length() < 8) || (input.length() > 20)) 
       { 
       System.out.println("Error! Your input is not valid."); 
       System.out.println("Please try again."); 
       keyboard.nextLine(); 
       } 

         for (int i = 0; i <= input.length(); i++) 
        { 
         if(Character.isUpperCase(input.charAt(i))) 
         { 
           break;       
         } 
         else 
         { 
           if(i == input.length()) 
           { 
             System.out.println("Error: Try again"); 
             input = keyboard.nextLine(); 
           } 
         } 
         } 

         for (int i = 0; i <= input.length(); i++) 
        { 
         if(Character.isLowerCase(input.charAt(i))) 
         { 
           break;       
         } 
         else 
         { 
           if(i == input.length()) 
           { 
             System.out.println("Try again"); 
             input = keyboard.nextLine(); 
           } 
         } 
         } 

         char [] numbers= {\'0\',\'1\',\'2\',\'3\', \'4\',\'5\',\'6\',\'7\',\'8\',\'9\'}; 
         char[] inputArray = input.toCharArray(); 

         for (int i = 0; i < inputArray.length; i++) 
         { 
           for (int j = 0; j < numbers.length; j++) 
           { 
             if (inputArray[i]== numbers[j]) 
           { 
               i=inputArray.length; 
         j=numbers.length; 

           } 
            else 
           { 
              if(i == inputArray.length-1 && j== numbers.length-1) 
           { 
                System.out.println("Try again");  
                input = keyboard.nextLine(); 


           } 
           } 
           } 




char [] SpecialCharacter = {\']\',\'[\',\'?\',\'/\',\'<\',\'~\',\'#\',\'.\',\'!\',\'$\',\'%\',\'^\',\'&\',\'*\',\'(\',\')\',\'+\',\'=\',\'}\',\'|\',\'>\',\'{\' }; 
         char[] inputArray2 = input.toCharArray(); 

         for (int k = 0; k < inputArray2.length; k++) 
         { 
           for (int l = 0; l < SpecialCharacter.length; l++) 
           { 
             if (inputArray2[k]== SpecialCharacter[l]) 
           { 
               k=inputArray2.length; 
         l=SpecialCharacter.length;  
           } 
            else 
           { 
              if(k == inputArray2.length-1 && l == SpecialCharacter.length-1) 
           { 
             System.out.println("No...Try Again"); 
             input = keyboard.nextLine(); 
           } 
           } 
           } 

           String domain1 = ".com"; 
           String domain2 = ".edu"; 
           String domain3 = ".org"; 
           String domain4 = ".mil"; 
           String domain5 = ".gov"; 
           String domain6 = ".net"; 


         } 
     } 
     } 
} 
+5

Пожалуйста, добавьте код в вопрос напрямую, а не просто ссылку на pastebin - но * форматируйте его разумно сначала *. Кроме того, этот паштет длиной более 130 строк - я ожидаю, что вы сможете легко продемонстрировать проблему в пределах 20 строк, что значительно облегчит вам помощь. –

+0

ДОРОГОЙ ЛОРД, что это за код !? Firslty, вы знаете, что вы сжигаете все мосты, которые вы сделали до сих пор, когда вы вводите новое значение ... Мое решение было бы сделать логический маркер 'isGood', а затем создать цикл while, в котором вы сначала читали на клавиатуре, а затем проверить каждый из предварительных условий, и как только один не подходит, вы делаете маркер 'isGood' ложным и используете' continue' ... – DaMachk

ответ

0

если вам нужно только проверить, что пользователь ввел действительный адрес электронной почты или нет, то вы должны использовать регулярные expersion для что делает его более легким и быстрым.

import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 

    public class EmailValidator { 

private Pattern pattern; 
private Matcher matcher; 

private static final String EMAIL_PATTERN = 
    "^(?=.*[0-9]*[a-z]*[A-Z])(?=.*[a-zA-Z])([a-zA-Z0-9]{8,20}[email protected][A-Za-z0-9]+.(com|org|edu|mil|net))$"; 

public EmailValidator() { 
    pattern = Pattern.compile(EMAIL_PATTERN); 
} 

/** 
* Validate hex with regular expression 
* 
* @param hex 
*   hex for validation 
* @return true valid hex, false invalid hex 
*/ 
public boolean validate(final String hex) { 

    matcher = pattern.matcher(hex); 
    return matcher.matches(); 

} 
    } 

надеюсь, что это вам поможет. =)

+0

Я не уверен, что это регулярное выражение проверяет, находится ли длина между 8 и 20, если письмо содержит специальный символ или хотя бы одну цифру ... – DaMachk

+0

для этого вы можете просто сделать это ** Проверка строк [] = emailString.split ("@"); - if (проверка [0] .length() <8 || проверка [0] .length()> 20) System.out.print ("Invalid"); else // ваш код ** –

+0

вам просто нужно добавьте эти две строки в код выше, и вы закончите =) и сделайте это, если он совпадает с шаблоном, иначе пропустите его. Принять это регулярное выражение может все, что вы хотите. –

0

я просто поставить это здесь ...

Вставьте части вашего кода, где это необходимо.

import java.util.Scanner; 
public class Username { 

    public static void main(String[] args) { 
      Scanner keyboard = new Scanner(System.in); 

      System.out.println("Must be between 8 and 20 characters."); 
      System.out.println("Must contain at least one uppercase and lowercase letter."); 
      System.out.println("Must contain at least one digit. "); 
      System.out.println("Must contain a special character ] [ ?/< ~ # ! $ %^& * () + = } | : ; , > { "); 
      System.out.println("Must contain @ before the domain"); 
      System.out.println("The only acceptable domains are .com .edu .org .mil .gov .net"); 
      System.out.println("\\n____Please enter your username to access the page. Follow the rules above.____ "); 

      boolean isOK = false; 
      String input=new String(); 

      while(!isOK){ 
       input=keyboard.nextLine(); 

       if(input.length() < 20 || input.length() > 8) //length check 
       { 
        isOK=true; 
       } 
       else 
       { 
        isOK=false; 
        continue; 
       } 

       if(input.contains('@')) //check domain 
       { 
        isOK=true;      
       } 
       else 
       { 
        isOK=false; 
        System.out.println("No @ before domain!"); 
        continue; 
       } 

       String[] tokens = input.split("@"); 
       String domain=tokens[1]; 
       String username=tokens[0]; 

       //check if contains digit 
       ... 

       //check uppercase and lowercase in username 
       ... 
       //check special character in username 
       ... 

       //split domain 
       tokens = domain.split("."); 
       String domainEnding = tokens[1]; 

       //check if the input domain endings are allowed 
       ... 


      } 
    } 
} 

Так где часть ввода неправильно просто использовать isOK=false; continue;

КСТАТИ: почему вы используете \' в специальных символов и числовых массивов? Вы можете использовать только '1', '@' и т.д.

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