Чтение адресов электронной почты как токенов - PullRequest
1 голос
/ 22 ноября 2011

Как я могу прочитать адрес электронной почты как токен?

Я видел, что метод токенизатора имеет ограничение в 16 битов, ну мой токен выглядит так:

command emailtest@somewhere.com 50

Я хочу иметь возможность хранить электронную почту (может быть любым адресом электронной почты) и номер (может варьироваться от 5 до 1500). Меня не волнует токен команды.

Мой код выглядит так:

String test2 = command.substring(7);
StringTokenizer st = new StringTokenizer(test2);
String email = st.nextToken();
String amount = st.nextToken();

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

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

"foo bar"@example.com

Вместо этого используйте генератор парсера. У многих есть очень хорошие грамматики RFC 2822.

Например, http://users.erols.com/blilly/mparse/rfc2822grammar_simplified.txt определяет addr-spec, который является продукцией, которую вы хотите, и вы можете определить грамматическое произведение для команды, пробела, addr-spec, space, number и затем определить ваше производство верхнего уровня как ряд из тех, которые разделены переносами строк.

1 голос
/ 22 ноября 2011

Если вы используете пробелы в качестве разделителя, почему бы не написать следующий код:

String[] temp =command.split(" ");
String email = temp[1];
String amount = temp[2];
0 голосов
/ 22 ноября 2011

Мне кажется, у вас уже есть адрес электронной почты, сохраненный в переменной email.

package com.so;

import java.util.StringTokenizer;

public class Q8228124 {
    public static void main(String... args) {
        String input = "command emailtest@somewhere.com 50";

        StringTokenizer tokens = new StringTokenizer(input);

        System.out.println(tokens.countTokens());

        // Your code starts here.
        String test2 = input.substring(7);
        StringTokenizer st = new StringTokenizer(test2);
        String email = st.nextToken();
        String amount = st.nextToken();

        System.out.println(email);
        System.out.println(amount);
    }
}

$ java com.so.Q8228124
3
emailtest@somewhere.com
50
0 голосов
/ 22 ноября 2011

Итак, если у вас есть данные в переменной с именем command, вы можете просто сделать:

StringTokenizer st = new StringTokenizer(command);
st.nextToken(); //discard the "command" token since you don't care about it
String email = st.nextToken();
String amount = st.nextToken();

В качестве альтернативы, вы можете использовать «split» для строки для загрузки ее в массив:*

String[] tokens = command.split("\w"); //this splits on any whitespace, not just the space
String email = tokens[1];
String amount = tokens[2];
...