假设我有一个电子邮件地址。像:kate.daniels@somecompany.com。
我需要不使用拆分或循环将其分解。而且我需要将DATE
与子字符串结合使用,而不要使用循环(稍后,在我对此有很深的了解之后,才会出现)。
但是在了解此电子邮件地址的前提下,电子邮件地址的格式应为:IndexOf
(firstName + "." + lastName + "@" + companyName + ".com")
感谢您提供的任何帮助。我可以看到这将是非常有帮助的并且想学习。
我已经浏览过,但是没有看到对我的问题的答复。
答案 0 :(得分:0)
如果首先找到@
并在其中分割字符串,则可以在任一部分都找到.
,而不必担心另一个。
答案 1 :(得分:0)
在这种情况下,您将按照以下方法进行操作:
String emailAddress = "kate.daniels@somecompany.com";
String firstName = emailAddress.substring(0, emailAddress.indexOf('.'));
String lastName = emailAddress.substring(emailAddress.indexOf('.') + 1, emailAddress.indexOf('@'));
String companyName = emailAddress.substring(emailAddress.indexOf('@') + 1, emailAddress.lastIndexOf('.'));
System.out.println("Firstname: " + firstName + "\nLastname: " + lastName + "\nCompany: " + companyName); //Print them
输出:
Firstname: kate
Lastname: daniels
Company: somecompany
Substring
需要两个参数来获取 range ,即开始索引和结束索引。仅具有单个参数的Substring
假定该参数为起始索引,并从该位置开始返回String
的其余部分。 See the documentation here.
请注意,substring
的起始索引是包含在内的,因此对于lastName
和companyName
,我需要放置+1
以排除.
和{{ 1}}的结果。
要注意的另一件事是@
,我必须使用emailAddress
,因为lastIndexOf(".")
中有两个句点,这将确保您获得{{1 }}正确的范围。通常String
返回第一个匹配项。
答案 2 :(得分:0)
我相信,最好的解决方案是使用RegExp
。这比str.substring()
更清楚。
String email = "kate.daniels@somecompany.com";
Pattern pattern = Pattern.compile("(?<firstName>\w+)\.(?<lastName>\w+)@(?<companyName>\w+)\.\w+");
Matcher matcher = pattern.matcher(email);
if (matcher.matches()) {
String firstName = matcher.group("firstName"); // kate
String lastName = matcher.group("lastName"); // daniels
String companyName = matcher.group("companyName"); // somecompany
}
如果您真的想使用str.substring()
,则只需找到一个极限点并使用它即可。
String email = "kate.daniels@somecompany.com";
int dotOne = email.indexOf('.');
int at = email.indexOf('@', dotOne + 1);
int dotTwo = email.indexOf('.', at + 1);
String firstName = email.substring(0, dotOne); // kate
String lastName = email.substring(dotOne + 1, at); // daniels
String companyName = email.substring(at + 1, dotTwo); // somecompany