将电子邮件地址作为标记阅读

时间:2011-11-22 14:08:25

标签: java token tokenize

如何将电子邮件地址作为代币阅读?

我看到tokenizer方法的长度限制为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 个答案:

答案 0 :(得分:2)

StringTokenizer不是这里工作的工具。电子邮件太复杂,无法处理,因为它无法处理有效的电子邮件地址,其中local-part是带引号的字符串作为一个标记:

"foo bar"@example.com

改为使用解析器生成器。许多都有完美的RFC 2822语法。

例如,http://users.erols.com/blilly/mparse/rfc2822grammar_simplified.txt定义了addr-spec这是您想要的制作,您可以为命令,空格,地址规格,空格,数字定义语法制作,然后定义您的顶级生产作为一系列由换行符分隔的。

答案 1 :(得分:1)

如果您使用空格作为分隔符,为什么不这样编码:

String[] temp =command.split(" ");
String email = temp[1];
String amount = temp[2];

答案 2 :(得分:0)

因此,如果您将数据放在名为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];

答案 3 :(得分:0)

我认为您确实已将电子邮件地址存储在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