在 java 中取一部分字符串

take a part of a string in java

我有一个字符串,其中包含 4 个属性,它们之间有 3 个空格(姓名、姓氏、电子邮件、电话)。例如:

"Mike   Tyson   mike@hotmail.com   0 999 999 99 99"

我需要从这个字符串中获取电子邮件。我搜索了正则表达式和标记,但找不到任何东西。谢谢。

使用以下代码片段 -

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExtractMail{

    public static void main(String[] args){

        String str = "Mike   Tyson   mike@hotmail.com   0 999 999 99 99";
        Matcher matcher = Pattern.compile("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+").matcher(str);

        while (matcher.find()) {
           System.out.println(matcher.group());
        }

    }

}

您可以使用以下方法提取第 1 组:

^[^\s]+\s+[^\s]+\s+([^\s]+)

代码:

String str = "Mike   Tyson   mike@hotmail.com   0 999 999 99 99";
Matcher matcher = Pattern.compile("^[^\s]+\s+[^\s]+\s+([^\s]+)").matcher(str);

while (matcher.find()) {
   System.out.println(matcher.group(1));
}
  1. split 您的字符串使用 3 个空格来获取标记数组
  2. 取你感兴趣的token(这里会被索引为[2]
String string = "Mike   Tyson   mike@hotmail.com   0 999 999 99 99";
System.out.println(string.split("   ")[2]); // your email

很简单。使用方法 split 获取字符串数组并调用所需元素进行索引。

一个班轮...

String s = "Mike   Tyson   mike@hotmail.com   0 999 999 99 99";
String email = s.trim().split(" ")[2];

根据 OP 的要求,这是一个带有 Regex 的版本:

public static void test()
{
    String str = "Mike   Tyson   mike@hotmail.com   0 999 999 99 99";
    Matcher matcher = Pattern.compile("[^ ]*@[^ ]*").matcher(str);

    while (matcher.find()) {
       System.out.println(matcher.group(0));
    }
}

[^ ]*@[^ ]* 匹配 @ 字符周围的任何字符(space 除外)。