我正在使用java并且具有以下字符串我正在尝试拆分为令牌。
FirstName M LastName (email domain.com)
应该最终看起来像这样
FirstName
M
LastName
(email domain.com)
我正在使用拆分(“\ s”); ,直到我介绍电子邮件才有效。现在它将电子邮件分成应该保持原样的空间。
除了大括号之间的空格外,我不知道如何分割所有空白区域。
我想指出数据可能以任何顺序出现,可能存在也可能不存在。
答案 0 :(得分:1)
如果前几个字符不支持括号,则可以拆分(首先。 然后在空格上修剪后拆分第一个字符串。
答案 1 :(得分:1)
这可能不完美,但这是一种可能的方式。正则表达式"\\s(?!\\S*\\))"
可以做你想要的。
此正则表达式将匹配任何未遵循的空格字符(\\s
)(负前瞻; (?!)
组)与一些非空格字符和“)”({ {1}})。这将适用于大量输入,但如果给定字符串中存在“)”的任何其他实例,则会发生故障。例如,使用它来拆分此字符串将不起作用:“FirstName M”LastName(email domain.com)“。它会分成这些字符串:
\\S\\)
答案 2 :(得分:1)
正则表达是最佳选择。这是一个简单的版本,但确实有效。像这样:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RESample {
public static void main(String[] args) {
String toSplit = "FirstName M LastName (email domain.com)";
Pattern pattern = Pattern.compile("([^\\s]+)\\s*([^\\s]+)\\s*([^\\s]+)\\s*(.*)");
Matcher result = pattern.matcher(toSplit);
if ( result.matches() )
{
String firstName = result.group(1);
System.out.println("First: " + firstName);
String mName = result.group(2);
System.out.println("Middle: " + mName);
String lastName = result.group(3);
System.out.println("Last: " + lastName);
String email = result.group(4);
System.out.println("Email: " + email);
}
else
{
System.out.println("No matches");
}
}
}
答案 3 :(得分:0)
使用split("\\s+", 2)
。这将限制数组元素的数量
答案 4 :(得分:0)
您可以执行以下操作:
String[] splits = message.split("(");
String[] name = splits[0].split("\s");
for( String str : name)
System.out.println(str);
System.out.println("(" + splits[1]);
答案 5 :(得分:0)
你可以使用
final String[] splits = message.split("(?<!email) ");
它使用负面的lookbehind。也就是说,拆分前面没有“电子邮件”的空格。