java - 使用 IndexOf() 查找字符串中某个字符的第 n 次出现

标签 java string substring indexof lastindexof

我有一个关于 indexOf() 的问题。我正在尝试编写一个EmailExtractor (是的,这是一项作业,但我不是在寻找代码)它从用户输入的句子中提取整个电子邮件地址。

例如 - 用户输入:给我们发邮件 [email protected]与您的查询。 然后程序将显示[email protected] 从上面String 。我明白了indexOf()substring()是必要的。

我现在的想法是使用indexOf()找到“@”,然后搜索用户输入的电子邮件地址之前的空格(第 n 个)。

我的代码如下:

System.out.println("This is an Email Address Extractor.\n");
System.out.print("Enter a line of text with email address: ");
String emailInput = scn.nextLine();
int spaceAt = emailInput.indexOf(" ");
for (int i = 1; i <= emailInput.indexOf("@"); i++){
    if (spaceAt < emailInput.indexOf("@")) {
        spaceAt = emailInput.indexOf(" ", spaceAt + 1);
    }
}

我理解并意识到我的代码中的问题。

1) "Mail us at <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b6d7d4d5f6d2d3d098d1dedf98dcdd" rel="noreferrer noopener nofollow">[email protected]</a> with your queries".indexOf(" ")是 4,我想得到 10。但是,我输入的 IF 条件将导致它跳到下一个 indexOf() 实例,即 25。(因为 10 < 14)。

我该如何避免这种情况发生?

再一次,我并不是在寻找纯粹的答案,而是试图找到解决方案。提前致谢!

最佳答案

如何找到@前后的空格

int at = emailInput.indexOf('@');
int start = emailInput.lastIndexOf(' ', at) + 1;
int end = emailInput.indexOf(' ', at);
if (end == -1) end = emailInput.length();
String email = emailInput.substring(start, end);

关于java - 使用 IndexOf() 查找字符串中某个字符的第 n 次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18921085/

相关文章:

c++ - 从字符数组中提取字符串

mysql - 从 MySQL 中的字符串中提取日期

Java多维数组

java: 表单加载时将焦点设置到文本字段

java - 无法使用 glassfish web 配置文件构建 netbeans 企业项目

c - 在 C 中缩短字符串

java - java中字符串的内存分配

python - 迭代 str 列表以创建带空格的 str

c# - 确定字符串中第一个字符的最有效方法?

java - Play Framework Java - 构建嵌套 JSON 对象以进行自动完成