2015-06-28 3 views
2

Как использовать String.format(), когда длина String непредсказуема? Я делаю программу, которая требует электронной почты и места, где «@» будет меняться в зависимости от длины на том, что происходит до него.Использование String.format() при изменении длины строки

Редактировать: Что я имею в виду, мне нужно проверить, действительно ли формат электронной почты. Пример: [email protected] является действительным адресом электронной почты, но делает johndoejohndoe, usa недействительна. Поэтому мне нужно, чтобы выяснить, если

  1. формат действует
  2. узнать, как посмотреть, если формат действителен с String.format(), когда длина String будет варьироваться в зависимости от электронной почты.
+6

Укажите, пожалуйста, некоторые примеры (электронные письма, которые вы хотели бы отформатировать) и ожидаемые результаты? – Gosu

+0

Немного обходного пути было бы проанализировать строку и вручную искать разделитель '@'. Это можно сделать с помощью цикла for, который пересекает каждый символ. – Boris

+0

String.format (..) не использует токен '@', но использует специальные спецификаторы формата, такие как '% s' для строки или'% d' для числа. См. Http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax. Не имеет значения, где эти значения отображаются в String. Они будут вставлены вместо соответствующего спецификатора. – redge

ответ

1

Я не совсем уверен, что вы считаете, как действительный адрес электронной почты, но я сделал следующее на основе этого предположения:

действительный адрес электронной почты является строкой, которая имеет, по меньшей мере, 1 слово характер, , за которым следует знак '@', за которым следует не менее 1 алфавит, а затем '.' характер, и заканчивая по крайней мере, 1 алфавитом

Вот код, используя регулярное выражение:

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

public class QuickTester { 

    private static String[] emails = {"[email protected]", 
      "randomStringThatMakesNoSense", 
      "[email protected]@@@@", "[email protected]", 
      "test123.com", "[email protected]", 
      "@[email protected]"}; 

    public static void main(String[] args) { 

     for(String email : emails) { 
     System.out.printf("%s is %s.%n", 
       email, 
       (isValidEmail(email) ? "Valid" : "Not Valid")); 
     } 
    } 

    // Assumes that domain name does not contain digits 
    private static boolean isValidEmail (String emailStr) { 

     // Looking for a string that has at least 1 word character, 
     // followed by the '@' sign, followed by at least 1 
     // alphabet, followed by the '.' character, and ending with 
     // at least 1 alphabet 
     String emailPattern = 
       "^\\w{1,}@[a-zA-Z]{1,}\\.[a-zA-Z]{1,}$"; 

     Matcher m = Pattern.compile(emailPattern).matcher(emailStr); 
     return m.matches(); 
    } 
} 

Выход:

[email protected] is Valid. 
randomStringThatMakesNoSense is Not Valid. 
[email protected]@@@@ is Not Valid. 
[email protected] is Not Valid. 
test123.com is Not Valid. 
[email protected] is Valid. 
@[email protected] is Not Valid. 

на основе вашего определения действительной электронной почты , вы можете настроить Pattern соответственно. Надеюсь, это поможет!

+0

Да, это то, что я имею в виду, спасибо! Извините, я могу сказать вещи очень сложно. –

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