2013-01-15 16 views
6

Jaki jest najłatwiejszy sposób na uzyskanie każdego słowa w ciągu innym niż ostatnie słowo w ciągu znaków? Do tej pory używam następujący kod, aby ostatnie słowo:Najprostszym sposobem na uzyskanie każdego słowa oprócz ostatniego słowa z ciągu znaków

String listOfWords = "This is a sentence"; 
String[] b = listOfWords.split("\\s+"); 
String lastWord = b[b.length - 1]; 

A potem coraz reszty łańcucha za pomocą metody Usuń, aby usunąć ostatnie słowo z łańcucha.

Nie chcę używać metody remove, czy istnieje sposób podobny do powyższego zestawu kodu, aby uzyskać zmienny ciąg słów bez ostatniego słowa i ostatniego spacji?

+0

Chcesz każde słowo będzie oddzielny ciąg, czy jeden łańcuch zawierający wszystko, ale ostatnie słowo Ok, też? – jlordo

+0

Chcę, aby każde słowo inne niż ostatnie słowo było w 1 łańcuchu, a następnie ostatnie słowo w innym ciągu. – Digitalwolf

+0

proszę zapytać tego rodzaju Q w http://codereview.stackexchange.com ......... możesz uzyskać lepsze odpowiedzi – sunleo

Odpowiedz

16

Jak to:

String test = "This is a test"; 
    String firstWords = test.substring(0, test.lastIndexOf(" ")); 
    String lastWord = test.substring(test.lastIndexOf(" ") + 1); 
5

można uzyskać lastIndexOf spacje i wykorzystanie podciąg jak poniżej:

  String listOfWords = "This is a sentence"; 
     int index= listOfWords.lastIndexOf(" "); 
     System.out.println(listOfWords.substring(0, index)); 
    System.out.println(listOfWords.substring(index+1)); 

wyjściowa:

 This is a 
     sentence 
+0

Dzięki temu właśnie szukałem – Digitalwolf

+0

@Digitalwolf serdecznie zapraszamy :) – PermGenError

+0

To jest ok ale dodaj spacje w ostatniej .... – Banku

4

Spróbuj użyć metody String.lastIndexOf w połączeniu z String.substring.

String listOfWords = "This is a sentence"; 
String allButLast = listOfWords.substring(0, listOfWords.lastIndexOf(" ")); 
3

I dodaje jedną linię do kodu, No usunąć tutaj

String listOfWords = "This is a sentence";  
    String[] b = listOfWords.split("\\s+"); 
    String lastWord = b[b.length - 1]; 
    String rest = listOfWords.substring(0,listOfWords.indexOf(lastWord)).trim(); // Added 
    System.out.println(rest); 
2

To własnych potrzeb:

.split("\\s+[^\\s]+$|\\s+") 

Na przykład:

"This is a sentence".split("\\s+[^\\s]+$|\\s+"); 

Powroty:

[This, is, a] 
+0

Z jakiegoś powodu otrzymuję: ** [Ljava.lang.String; @ ca0b6 ** po uruchomieniu regex. Jakieś pomysły? – Digitalwolf

+0

@Digitalwolf Ponieważ 'split' zwraca tablicę, a' Ljava.lang.String; @ ca0b6' jest reprezentacją tablicy łańcuchów znaków (np. Wywołując 'myArray.toString()'). Po prostu użyj 'Arrays.asList (myArray)' (np. 'Arrays.asList (" To jest zdanie ".split (" \\ s + [^ \\ s] + $ | \\ s + ")))), aby uzyskać wynik podany, ponieważ lista ma * lepszą * reprezentację (bardziej * przyjazną dla użytkownika * powiedzmy ';)'). – sp00m

+0

Oh ya, przepraszam głupi błąd = D dzięki – Digitalwolf

1

public class StringArray {

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    String sentense="this is a sentence"; 

    int index=sentense.lastIndexOf(" "); 

    System.out.println(sentense.substring(0,index)); 

} 

}

Powiązane problemy