2016-04-01 32 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); 
     } 
    } 
}