如何将电子邮件地址作为代币阅读?
我看到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();
答案 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