使用IndexOf和子字符串将字符串分开,而不使用拆分或循环

时间:2019-07-30 18:22:53

标签: java substring

假设我有一个电子邮件地址。像:kate.daniels@somecompany.com。
我需要不使用拆分或循环将其分解。而且我需要将DATE与子字符串结合使用,而不要使用循环(稍后,在我对此有很深的了解之后,才会出现)。

但是在了解此电子邮件地址的前提下,电子邮件地址的格式应为:IndexOf

(firstName + "." + lastName + "@" + companyName + ".com")

感谢您提供的任何帮助。我可以看到这将是非常有帮助的并且想学习。

我已经浏览过,但是没有看到对我的问题的答复。

3 个答案:

答案 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的起始索引是包含在内的,因此对于lastNamecompanyName,我需要放置+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