2016-03-21 112 views
1

我試圖將字符串分割喜歡的正則表達式的工作:()不分割功能

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

我試圖用分割功能,如:str.split("()#", 2);,但輸出像: "Stack Overflow" "forum #website"

看來,()不起作用,我該怎麼辦才能解決這個問題?

在此先感謝。

+0

在表達式中,括號不具有任何影響。你應該看看正則表達式手冊中關於如何使用它們。順便說一句,網絡上有很多正則表達式編輯器。其中一人可能會幫助你。 – hagello

回答

4

您需要使用肯定的超前斷言。

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

一點解釋:

  • \\s任何空格字符相匹配。
  • (?=#)積極的前瞻聲明,認爲匹配,即space應該跟着#
  • 因此#forum之前的空間得到匹配,並且java根據該空格字符進行拆分。

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

它的工作原理,你能解釋一下嗎? – 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: - (返回值: 堆棧溢出 #forum #website) (返回值: 堆棧溢出 論壇#website) –