2011-01-12 10 views
37

Jaki jest najprostszy sposób na uzyskanie ostatniego słowa ciągu w Javie? Nie można przyjmować interpunkcji (tylko znaki alfabetyczne i białe znaki).Java: Najprostszy sposób na uzyskanie ostatniego słowa w ciągu znaków

+0

pokrewne: http://stackoverflow.com/questions/1181969/java-get-last-element-after-split – GreenMatt

+3

Tytuł mówi "najszybszych", pytania prosi o "najprostsza". Proszę o wyjaśnienie. – z5h

+1

Najszybszy i najprostszy do kodowania i czytania. Czas wykonania jest nieistotny. Na marginesie, posiadanie innego sformułowania jest lepsze dla celów wyszukiwania, chociaż rozbieżność była niezamierzona. – Muhd

Odpowiedz

126
String test = "This is a sentence"; 
String lastWord = test.substring(test.lastIndexOf(" ")+1); 
+7

Potrzebuje +1 i kończy się niepowodzeniem na pojedynczym słowie. – marcog

+0

Jedna linia jest fajna, ponieważ użyję jej w kodzie szablonu prędkości. Można połączyć z regularną ekspedycją, aby uwzględnić inne znaki, takie jak rozwiązanie JST. – Muhd

+2

Właściwie to jest lepsze, już zawiera pojedyncze słowo: String lastWord = test.substring (test.lastIndexOf ("") +1); – Muhd

17
String testString = "This is a sentence"; 
String[] parts = testString.split(" "); 
String lastWord = parts[parts.length - 1]; 
System.out.println(lastWord); // "sentence" 
+0

To jest rozwiązanie, które pewnie wymyśliłbym sam, nieźle, ale jednolinijkowy byłby lepszy. – Muhd

+0

Kiedy mówisz "najszybszy", masz na myśli najkrótszy kod lub najszybszy do wykonania? Może to zostać przekształcone w jeden liniowiec, ale nie będzie on działał szybciej i będzie trudniejszy do odczytania. –

+1

Nie powiedziałem "najszybszy", powiedziałem "najprostszy", przez co miałem na myśli połączenie zwięzłości i łatwości zrozumienia. – Muhd

10

Jeśli inne znaki odstępu możliwe jest, to, czego chcesz:

testString.split("\\s+"); 
4

można zrobić z StringUtils (od Apache Commons Lang). Uniknie magii indeksu, więc łatwiej ją zrozumieć. Niestety substringAfterLast zwraca pusty łańcuch, gdy nie ma separatora w łańcuchu wejściowym, więc potrzebujemy instrukcji if dla tego przypadku.

public static String getLastWord(String input) { 
    String wordSeparator = " "; 
    boolean inputIsOnlyOneWord = !StringUtils.contains(input, wordSeparator); 
    if (inputIsOnlyOneWord) { 
     return input; 
    } 
    return StringUtils.substringAfterLast(input, wordSeparator); 
} 
8

Oto sposób, aby to zrobić za pomocą String „s wbudowaną regex możliwości:

String lastWord = sentence.replaceAll("^.*?(\\w+)\\W*$", "$1"); 

Chodzi o to, aby dopasować cały ciąg z ^ do $, uchwycić ostatniej sekwencji \w+ w grupie przechwytującej 1 i zastąpienie całego zdania przy użyciu $1.

Demo.

Powiązane problemy