需要帮助在java中拆分字符串

时间:2013-12-10 20:34:34

标签: java split

我正在使用java并且具有以下字符串我正在尝试拆分为令牌。

FirstName M LastName (email domain.com)

应该最终看起来像这样

FirstName
M
LastName
(email domain.com)

我正在使用拆分(“\ s”); ,直到我介绍电子邮件才有效。现在它将电子邮件分成应该保持原样的空间。

除了大括号之间的空格外,我不知道如何分割所有空白区域。

我想指出数据可能以任何顺序出现,可能存在也可能不存在。

6 个答案:

答案 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。也就是说,拆分前面没有“电子邮件”的空格。