2016-04-01 53 views
0

我的字符串包含分割字符串多的基礎上,定界符

{我的辦公室每天24小時開放,如果您有任何問題(查詢)與我們聯繫。}

,我想打破成

{我的},{辦公室},{打開},{24},{/},{7},{},{如果},{您},{有},{ {}},{{},{query},{)},{contact},{with},{us},{。}

表示,如果單個字符串只包含字符或數字將它分開。如果文字包含帶有字符或數字的特殊字符,請在特殊字符之前分隔字符,在特殊字符之後分隔特殊字符和分隔字符

我正在尋找任何解決方案,方法是使用string.split()或使用任何其他的替代邏輯。提前致謝。

+0

發佈一個解決方案的嘗試 –

+0

我認爲這可以用正則表達式來實現。 –

+0

你的字符串包含字符'{'?或者你只是在這裏simbolize –

回答

2

你可以試試這個:

String str = "my office opens 24/7, if you have any question (query) contact with us."; 

String[] splited = str.split("(?=[()./,])|(?<=[()./,])|\\s"); 

UPDATE

正如指出拉斐爾Battesti,該解決方案不與其他特價字符例如工作就像 '@' 或 '%'。

所以,我覺得你可以在正則表達式改爲

String[] splited = str.split("(?=[\\W])|(?<=[\\W])");

+0

謝謝你的迴應,我運行你的答案,它類似的解決方案,但它不會打破24/7 –

+0

@FarazSultan我' ve已更新,再次檢查 –

+1

@FarazSultan我已經把'\\ s'放在括號外,不能保留分隔數組中的空格,但是如果它工作的話就沒有問題:) –

1

我會加起來你的答案,因爲你有一個很好的正則表達式!當我發現這個答案仍然留下一些空格。我添加了一些行來生成所要求的確切輸出。 :-)

import java.util.ArrayList; 
public class Example { 
    public static void main(String[] args) { 
     String str = "my office opens 24$7, if you have any question (query) contact with us."; 
     String[] split = str.split("(?=[\\W])|(?<=[\\W])|\\s"); 
     ArrayList<String> finalList = new ArrayList<>(); 

     for (int i = 0; i < split.length; i++) { 
      if (!split[i].equals(" ")) { 
       finalList.add(split[i]); 
      } 
     } 

     //Test 
     for (String i : finalList) { 
      System.out.println(i); 
     } 
    } 
}