【问题标题】:Breaking apart a String using IndexOf and substring without using split or a loop在不使用拆分或循环的情况下使用 IndexOf 和子字符串拆分字符串
【发布时间】:2019-12-08 05:07:01
【问题描述】:

假设我有一个电子邮件地址。喜欢:kate.daniels@somecompany.com。
而且我需要在不使用拆分或循环的情况下将其分开。并且我需要将IndexOf 与子字符串结合使用,而不是使用循环(这将在我首先对此有深刻理解之后才会出现)。

但是查看这个电子邮件地址并理解电子邮件地址的格式如下:(firstName + "." + lastName + "@" + companyName + ".com")

emailAddress = input.nextLine();
//  This is where I have issues.
firstName = emailAddress.substring(emailAddress.IndexOf(".") );

// How do I get this to be just the last name and not lastName + "@somecompany.com"
lastName = emailAddress.substring(emailAddress.IndexOf(".") + 1);

// And how do I get the company name without the ".com"
companyName = emailAddress.substring(emailAddress.IndexOf("@") + 1);

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

我浏览了一遍,但没有看到对我的问题的答复。

【问题讨论】:

标签: java substring


【解决方案1】:

如果您首先找到@ 并在那里分割字符串,您可以在任一部分找到.,而无需担心另一部分。

【讨论】:

    【解决方案2】:

    在这种情况下,您将如何做到这一点:

    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 需要两个参数来获得一个范围,开始和结束索引。只有一个 single 参数的Substring 假定该参数是开始索引并返回从该位置开始的String 的其余部分。 See the documentation here.

    请注意,substring 的起始索引包含在内,因此对于 lastNamecompanyName,我需要输入 +1 以从结果中排除 .@

    另一个需要注意的重要事项是对于emailAddress,我必须使用lastIndexOf("."),因为String 中有两个句点,这将确保您得到最后一个到substring 的正确范围。通常indexOf 返回第一个匹配项。

    【讨论】:

    • 非常感谢!这正是我一直在寻找的!这真的很酷。我是 Java 新手,我来自世界的数据库,能够像这样分解事物真是太棒了。
    • @Martha 没问题。我知道你也说过不要使用 split 来解决这个问题,但是将来使用像 String [] s = emailAddress.split("[.@]"); 这样的东西可能会很有用,它更简单,并且会在前 3 个数组位置中放入你需要的 3 个名称!祝你好运!
    【解决方案3】:

    我相信,最好的解决方案是使用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
    

    【讨论】:

    • 感谢您对此的帮助。我还没有开始使用 RegExp,但是一旦我开始使用,我会回到这个。谢谢
    猜你喜欢
    • 2013-01-23
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多