2013-03-09 5125 views
7
String sentence = "Any simpler way to get the last element of a Java array?"; 
String lastToken = sentence.split(" ")[sentence.split(" ").length-1]; 

我想拆分句子並獲取最後一個標記。我覺得我的做法有些尷尬。基本上,我希望第二個陳述更短。那可能嗎?獲取Java數組最後一個元素的更簡單的方法是什麼?

編輯:我在找什麼:1)不需要單獨聲明數組2)不需要將句子分開兩次。如果有一種叫做last的方法,那將會很好。我懷疑這是不可能的,但要確保。

+3

你正在拆分相同的東西兩次。你不想這樣做。更短並不意味着更好。 – 2013-03-09 23:10:20

+0

所以你正在尋找'array?'? – 2013-03-09 23:10:57

+0

只是來自'\\ s +'的最後一個索引或空白字符(如''''')的子字符串。 – 2013-03-09 23:11:56

回答

11

另一種方式來獲得最後一個記號/字

String lastToken = sentance.replaceAll(".* ", ""); 
+1

我發現這個最優雅。謝謝。 – 2013-03-09 23:29:56

+1

+1,非常優雅。儘管我會使用'sentance.trim()。replaceAll(「。*」,「」);'以避免由於尾隨空格造成空字符串。 – jlordo 2013-03-09 23:35:34

+0

@jlordo - 這已經被指出。但是,您所缺少的是原始解決方案存在同樣的問題......所以您可以將其視爲*需求*,即任何解決方案都應該以相同的方式運行。 – 2013-03-09 23:41:22

12

您只需將其拆分一次,並取最後一個元素。

String sentence = "Any simpler way to get the last element of a Java array?"; 
String[] tokens = sentence.split(" "); 
String lastToken = tokens[tokens.length-1]; 

這是尷尬的,但真的沒有其他辦法做到這一點,除非你有字符串的長度預知。

+1

爲什麼倒票?up-vote 1+ – 2013-03-09 23:14:28

+0

當然,您可以將'tokens [tokens.length-1]'邏輯抽象爲一些實用函數,然後您可以像getLastElement(sentence.split(「」))「或其他東西一樣調用它。 – poke 2013-03-09 23:16:21

+0

對不起,我沒有明確表達我的意圖。我不想通過單獨聲明數組來做到這一點。 – 2013-03-09 23:17:13

3
String sentence = "Any simpler way to get the last element of a Java array?"; 
String lastToken = sentence.substring(sentence.lastIndexOf(" ") + 1); 
+0

儘管這是字符串情況,但這非常具體。它不會與真正的數組一起工作,這是真正的問題... – poke 2013-03-09 23:17:21

+0

他意味着數組與字符串在分割時產生的數組一樣。 – 2013-03-09 23:18:00

+0

@Legend我知道,但我明白,字符串分裂更像是一種獲得示例的方式。 – poke 2013-03-09 23:18:45

3

如果你正在做這只是一次,然後彼得Lawrey的解決方案是較短的,但IMO是難度比原來的版本理解。

如果您在多個地方做這個再下面是更好:

public String getLastToken(String str, String separatorRegex) { 
    String tokens[] = str.split(separatorRegex); 
    return tokens[tokens.length - 1]; 
} 

然後

String lastToken = lastToken(sentence, " "); 

...這是比任何聰明的黑客更優雅...... IMO。


我更普遍的觀點是,花費的時間努力使代碼更短可能是浪費時間一行...或者更糟:

  • 從別人的角度看ELSE閱讀你的代碼,一條線對兩條線是無關緊要的。
  • 如果聰明的黑客使得行更短是模糊的,那麼你實際上做了一件壞事,使用它......從下一個閱讀/維護你的代碼的人的角度來看。
  • 如果聰明的黑客比不雅的版本效率低,你可能已經引入了性能問題。

但是,如果您在很多地方重複該行代碼(或類似),那麼最好的解決方案是使用過程抽象。寫一個靜態或實例方法...一次...並多次調用它。

+0

已採取的建議。非常感謝你。 – 2013-03-09 23:53:43

相關問題