2016-03-21 5 views
1

Ich versuche String wie aufzuspalten:() funktionieren nicht in regulärem Ausdruck von Split-Funktion

"Stack Overflow #forum #website"; ->"Stack Overflow" "#forum #website"

Ich versuchte Split-Funktion zu verwenden, wie: str.split("()#", 2);, aber der Ausgang war wie: "Stack Overflow" "forum #website".

Es scheint, dass die () nicht funktioniert, was soll ich tun, um das zu beheben?

Vielen Dank im Voraus.

+0

In Ihrem Ausdruck, die Klammern haben keine Wirkung. Sie sollten in einem Regex-Handbuch nachsehen, wie Sie sie verwenden können. Übrigens gibt es viele Regex-Editoren im Internet. Einer von ihnen könnte dir helfen. – hagello

Antwort

4

Sie müssen positive Lookahead-Assertion verwenden.

str.split("\\s(?=#)", 2); 

Kleine Erklärung:

  • \\s passt jede Art von Leerzeichen.
  • (?=#) Positiver Lookahead, der besagt, dass die Übereinstimmung, dh space, von # gefolgt werden sollte.
  • So Speicherplatz vor #forum wurde abgestimmt und Java tun, entsprechend diesem Leerzeichen Splitting.

oder

str.split(" (?=#)", 2); 
+0

Es hat funktioniert, könntest du ein wenig erklären? – Fingal

0
public class split { 

     public static void main(String args[]){ 
      String Str = new String("Stack Overflow #forum #website"); 
//**********that's what is to be done *************************** 
      System.out.println("Return Value :"); 
      for (String retval: Str.split("(?=#)", 2)){ 
      System.out.println(retval); 
      } 
//***********THAT'S WHAT YOU WERE DOING ****************************** 
      System.out.println(""); 
      System.out.println("Return Value :"); 
      for (String retval: Str.split("#", 2)){ 
      System.out.println(retval); 
      } 

     } 

} 
+0

OUTPUT: - (Rückgabewert: Stack-Überlauf #Forum #website) (Rückgabewert: Stack-Überlauf Forum #website) –

Verwandte Themen