基于多个分隔符拆分字符串

时间:2016-04-01 17:28:26

标签: java regex string

我的字符串包含

{我的办公室每天24小时开放,如果您有任何问题(查询)与我们联系。}

我希望将其分解为

  

{my},{office},{opens},{24},{/},{7},{,},{if},{you},{have},{any},   {question},{{},{query},{)},{contact},{with},{us},{。}

表示,如果单个字符串的字符串仅包含字符或数字将它分开。如果文字包含带有字符或数字的特殊字符,则在特殊字符前分隔字符,在特殊字符后分隔特殊字符和单独的字符

我正在寻找任何解决方案,使用string.split(),或使用任何其他替代逻辑。在此先感谢。

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

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

<强>更新

正如Rafael Battesti指出的那样,此解决方案不适用于其他特殊字符,例如“@”或“%”。

所以,我认为你可以将正则表达式改为

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

答案 1 :(得分: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);
        }
    }
}