Я проверил этот Java REGEX на 2 разных онлайн-валидаторах (для Java), и, похоже, он работает как с одно-, так и с двухэлементными фамилиями. Однако первый элемент в split всегда нулевой - что я делаю не так? У меня есть обходной путь, но, очевидно, это не очень профессионально .... спасибо за понимание
String strVal = "Daly Oslen, Krysta Patrolman Second Sector";
//String strVal = "Oslen, Krysta Patrolman Second Sector";
String[] values2 = strVal.split("(.*),\\s{0,2}(\\w+)");
System.out.println(" strVal=" + strVal);
System.out.println("values2[0]=" + values2[0]);
System.out.println("values2[1]=" + values2[1]);
values2[0]= strVal.replace(values2[1], "");
System.out.println("new values2[0]=" + values2[0]);
================================================================
strVal=Daly Oslen, Krysta Patrolman Second Sector
values2[0]=
values2[1]= Patrolman Second Sector
new values2[0]=Daly Oslen, Krysta
ADDED : Thanks for the reply. The regex (.*),\s{0,2}(\w+) does select
"Daly Oslen, Krysta" in the validators, if I check the length of values2 it
is indeed 2, it's acting like it finds nothing before my search term, so
Java split is working correctly and maybe is not the tool I want?
Pattern p = Pattern.compile("(.*),\\s{0,2}(\\w+)");
Matcher m = p.matcher(strVal);
if (m.find()) {
System.out.println("m=" + m);
System.out.println("m.group(0)" + m.group(0));
} else {
System.out.println("no match");
}
Here's the output - check out how println m prints out!
m=java.util.regex.Matcher[pattern=(.*),\s{0,2}(\w+) region=0,42
lastmatch=Daly Oslen, Krysta]
m.group(0)Daly Oslen, Krysta