2016-03-19 7 views
1

Ich habe String zum Beispiel, "John Daws Black" mit Leerzeichen aufgeteilt und ich muss sie in zwei Teile zu teilen, so dass es Namensteil wie "John Daws" und Nachname Teil wie "Black" werden. Der vordere Namensteil kann jedoch beliebig lang sein wie "John Erich Daws Black". Mein Code kann den letzten Teil bekommen:Split Full Name

public String getSurname(String fullName){ 
    String part = ""; 
    for (String retval: fullName.split(" ")) 
     part = retval; 
     return part; 
} 

Aber ich weiß nicht, wie man den vorderen Teil erhält.

+1

Split die Zeichenfolge wie Sie tun, die Zeichenfolge umkehren, nehmen Sie das erste Element in der umgekehrten Anordnung, die Ihr Nachname ist. Danach kann der Rest der erste Name sein, da es so aussieht, als wäre der zweite Vorname kein Thema. – SMT

+0

@Habil Ganbaril Wenn der Name "John Erich Daws Black" ist, was wird von Ihnen erwartet? – user3437460

+0

Was ist mit Giovani dos Santos? – shoover

Antwort

2

bereits.

public String getName(String fullName){ 
    return fullName.split(" (?!.*)")[0]; 
} 

public String getSurname(String fullName){ 
    return fullName.split(" (?!.*)")[1]; 
} 
+1

Ein einfaches 'lastIndexOf ('')' wäre viel schneller. – Andreas

7

Finden Sie einfach die letzte Speicherplatz, dann manuell teilen Sie dort mit substring().

String fullName = "John Erich Daws Black"; 
int idx = fullName.lastIndexOf(' '); 
if (idx == -1) 
    throw new IllegalArgumentException("Only a single name: " + fullName); 
String firstName = fullName.substring(0, idx); 
String lastName = fullName.substring(idx + 1); 
+0

Vielen Dank :) –

1

das letzte Element des Arrays holen nach spliting:

String fullName= "John Daws Black"; 
    String surName=fullName.split(" ")[fullName.split(" ").length-1]; 
    System.out.println(surName); 

Ausgang:

Black 

Edit: für den vorderen Teil, Verwendung String:

String fullName= "John Daws Black"; 
    String surName=fullName.split(" ")[fullName.split(" ").length-1]; 
    String firstName = fullName.substring(0, fullName.length() - surName.length()); 
    System.out.println(firstName); 

Ausgang:

John Daws 
+1

Keine Antwort auf das eigentliche Problem als * "Aber ich weiß nicht, wie man den vorderen Teil" *. – Andreas

+0

Vielen Dank, aber ich brauchte nur den vorderen Teil –

+1

@Andreas Antwort bearbeitet. – jfun

1
//Split all data by any size whitespace 
final Pattern whiteSpacePattern = Pattern.compile("\\s+"); 
final List<String> splitData = whiteSpacePattern.splitAsStream(inputData) 
.collect(Collectors.toList()); 

//Create output where first part is everything but the last element 
if(splitData.size() > 1){ 
    final int lastElementIndex = splitData.size() - 1; 
    //connect all names excluding the last one 
    final String firstPart = IntStream.range(0,lastElementIndex). 
    .mapToObj(splitData::get) 
    .collect(Collectors.joining(" ")); 

    final String result = String.join(" ",firstPart, 
    splitData.get(lastElementIndex)); 
}