2011-01-12 44 views
37

Cách đơn giản nhất để nhận được từ cuối cùng của một chuỗi trong Java là gì? Bạn có thể giả sử không có dấu chấm câu (chỉ là ký tự chữ cái và khoảng trắng).Java: Cách đơn giản nhất để có được từ cuối cùng trong một chuỗi

+0

liên quan: http://stackoverflow.com/questions/1181969/java-get-last-element-after-split – GreenMatt

+3

Tiêu đề nói "nhanh nhất", câu hỏi yêu cầu "đơn giản nhất". Vui lòng làm rõ. – z5h

+1

Nhanh nhất và đơn giản nhất để viết mã và đọc. Thời gian thực hiện không liên quan. Là một sang một bên, có từ ngữ khác nhau là tốt hơn cho các mục đích tìm kiếm mặc dù sự khác biệt là vô ý. – Muhd

Trả lời

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

Cần +1 ở đó và không thành công trên một từ. – marcog

+0

Một dòng là tốt đẹp vì tôi sẽ sử dụng nó trong mã mẫu Velocity. Có thể được kết hợp với một expession thường xuyên để tài khoản cho các nhân vật khác như giải pháp của JST. – Muhd

+2

Thực ra điều này tốt hơn, nó đã chiếm một từ duy nhất: 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

Đây là giải pháp mà tôi có thể tự mình nghĩ ra, không tệ, nhưng một lớp lót sẽ tốt hơn. – Muhd

+0

Khi bạn nói "nhanh nhất", bạn có nghĩa là ngắn nhất trong mã hoặc nhanh nhất để thực hiện? Điều này có thể được làm thành một lớp lót, nhưng nó sẽ không thực hiện nhanh hơn và sẽ khó đọc hơn nhiều. –

+1

Tôi không nói "nhanh nhất", tôi nói "đơn giản nhất", theo đó tôi có nghĩa là một sự kết hợp ngắn gọn và dễ hiểu. – Muhd

10

Nếu ký tự khoảng trắng khác có thể xảy ra, sau đó bạn muốn:

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

Bạn có thể làm điều đó với StringUtils (từ Apache Commons Lang). Nó tránh chỉ số ma thuật, vì vậy nó dễ hiểu hơn. Thật không may substringAfterLast trả về chuỗi rỗng khi không có dấu phân cách trong chuỗi đầu vào, vì vậy chúng tôi cần câu lệnh if cho trường hợp đó.

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

Dưới đây là một cách để làm điều đó bằng String 's tích hợp khả năng regex:

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

Ý tưởng là để phù hợp với toàn bộ chuỗi từ ^ để $, chụp dãy cuối cùng của \w+ trong nhóm chụp 1 và thay thế toàn bộ câu bằng cách sử dụng $1.

Demo.

Các vấn đề liên quan