如何在java中拆分带有特定分隔符的字符串

如何在java中拆分带有特定分隔符的字符串,java,Java,我有一根绳子 [Ian Wood P. M. Visscher] [Ian Wood L. Mengersen] [Ian Wood] [P. M. Visscher Ian Wood]. 我想把这个字符串写入二维数组。(即)字符串 每次我输入时,字符串中的名称都会改变。我如何将其拆分并以上述形式存储在数组中。请提出任何意见。提前谢谢。下面是我编写的代码,但没有正确拆分 String[] parts = output.split(" "); String[][] table = new Str

我有一根绳子

[Ian Wood P. M. Visscher]
[Ian Wood L. Mengersen]
[Ian Wood]
[P. M. Visscher Ian Wood].
我想把这个字符串写入二维数组。(即)字符串

每次我输入时,字符串中的名称都会改变。我如何将其拆分并以上述形式存储在数组中。请提出任何意见。提前谢谢。下面是我编写的代码,但没有正确拆分

String[] parts = output.split(" ");
String[][] table = new String[parts.length / 2][2];
for (int i = 0, r = 0; r < table.length; r++) {
table[r][0] = parts[i++];
table[r][1] = parts[i++];
}
System.out.println(java.util.Arrays.deepToString(table));
String[]parts=output.split(“”);
字符串[][]表=新字符串[parts.length/2][2];
for(int i=0,r=0;r
我假设您的意思是首字母缩写为“某些分隔符”,并且您的输入字符串是一个字符串数组:

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

import static java.lang.System.out;
import static java.util.regex.Pattern.CASE_INSENSITIVE;
import static java.util.regex.Pattern.compile;

public final class Q14914678 {

    private static final Pattern pattern = compile("^\\s*((?:[a-z]+\\s*?)*)\\s*([a-z]\\..*)?", CASE_INSENSITIVE);

    private static final String[] names = {
            "Ian Wood P. M. Visscher",
            "Ian Wood L. Mengersen",
            "Ian Wood",
            "P. M. Visscher Ian Wood"
    };

    public static void main(String[] args) {
        final List<String[]> collected = new ArrayList<String[]>();
        for ( final String name : names ) {
            final Matcher matcher = pattern.matcher(name);
            if ( matcher.matches() ) {
                collected.add(new String[] {matcher.group(1), matcher.group(2)});
            }
        }
        for ( final String[] array : pairArray ) {
            out.println(array[0] + " / " + array[1]);
        }
    }

}

你为什么不能用别的分隔符来分隔你的名字呢?像
#
或任何不在名称中的内容?
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static java.lang.System.out;
import static java.util.regex.Pattern.CASE_INSENSITIVE;
import static java.util.regex.Pattern.compile;

public final class Q14914678 {

    private static final Pattern pattern = compile("^\\s*((?:[a-z]+\\s*?)*)\\s*([a-z]\\..*)?", CASE_INSENSITIVE);

    private static final String[] names = {
            "Ian Wood P. M. Visscher",
            "Ian Wood L. Mengersen",
            "Ian Wood",
            "P. M. Visscher Ian Wood"
    };

    public static void main(String[] args) {
        final List<String[]> collected = new ArrayList<String[]>();
        for ( final String name : names ) {
            final Matcher matcher = pattern.matcher(name);
            if ( matcher.matches() ) {
                collected.add(new String[] {matcher.group(1), matcher.group(2)});
            }
        }
        for ( final String[] array : pairArray ) {
            out.println(array[0] + " / " + array[1]);
        }
    }

}
Ian Wood / P. M. Visscher
Ian Wood / L. Mengersen
Ian Wood / null
 / P. M. Visscher Ian Wood