Невозможно заставить String.split () работать должным образом на Android - PullRequest
4 голосов
/ 16 июля 2011

Я хочу разделить строку электронной почты в Java (Android), но это не работает правильно.

Input: "ihnel48@gmail.com"
String[] pattens = email.split("@.");
Expected: "ihnel48", "gmail", "com"
Output: "ihnel48" "mail.com"

Ответы [ 8 ]

11 голосов
/ 16 июля 2011

Поскольку String.split совпадений на основе регулярного выражения , @. означает, что он ищет два символа в строке (либо не ) символ один раз). И, . в регулярных выражениях - это специальный символ, означающий «что-нибудь»:

@. = "@ and then any character"

В вашем случае это соответствует "@g" и , а не точка.

Вместо этого вы хотите:

String[] pattens = email.split("[@.]");

Квадратные скобки, [], создают класс символов, который представляет все допустимые символы, которым может соответствовать одна позиция. Итак, вам нужно соответствовать "@" или ".". Символ . не должен быть экранирован внутри класса символа.

3 голосов
/ 16 июля 2011

Вы должны избежать периода (.). В противном случае это подстановочный знак, который будет соответствовать любому отдельному символу. Способ избежать этого - с помощью обратной косой черты. В литеральных строках в Java обратная косая черта также является escape-символом, поэтому необходимо использовать две обратные косые черты. Кроме того, вам нужен какой-то оператор «или», чтобы сказать ему делиться, когда он достигает . ИЛИ @. Есть два способа сделать это.

Вот один из них:

String[] pattens = email.split("@|\\.");

Вот еще один:

String[] pattens = email.split("[@\\.]");
1 голос
/ 16 июля 2011

. соответствует g, т.е. g также удаляется

0 голосов
/ 10 августа 2013

попробуйте этот код

 StringTokenizer tokens = new StringTokenizer(CurrentString, "@");
 String first = tokens.nextToken();
 String second = tokens.nextToken();
0 голосов
/ 16 июля 2011

Веселое решение:

     //Replace all "." to "@", and split
     String split(String input){
        String[] patterns = input.replaceAll("\\.", "@").split("@");
        return Arrays.toString(patterns);
    }
0 голосов
/ 16 июля 2011

Вы хотели разделить на @ или.Я верю.

Правильное регулярное выражение для этого: "@|\."

Редактировать: поставить скобки вместо кавычек первоначально

0 голосов
/ 16 июля 2011

Попробуйте:

String[] pattens = email.split("@");
0 голосов
/ 16 июля 2011

Похоже, это сработало идеально.Вы дали ему регулярное выражение, которое говорит, что ищет символ «@», за которым следует любой символ (что означает «.» В регулярном выражении).Это то, что он нашел и разделил на него.

Я не регулярное выражение, но я думаю , что может быть "@ | \".будет делать то, что вы, по-видимому, намеревались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...