如何拆分字符串而不丢失java中的任何字符

时间:2014-10-17 12:31:56

标签: java string split

我正在使用eclipse for java。

我想从用户分割输入行而不会丢失任何字符。

例如输入行是:+2+ sqrt(25 )-41*3- abs(-4)-62 /2

输出应为:+2,+sqrt(25),-41,*3,-abs(-4),-62,/2

(如果我用“+”等分开,则字符“+”本身将被删除。)

我该怎么办?

我的代码是这样的:

    Scanner scanner=new Scanner(System.in);
    String str= scanner.nextLine();
    String[] parts;
    parts = str.split("!?!?!!?!");  // i don't know what to put here

1 个答案:

答案 0 :(得分:0)

您可以使用Java中的正则表达式来执行此操作,假设您不能使用嵌套括号(这是非常必要的)

    List<String> parts = new ArrayList<String>();

    String input = "+2+ sqrt(25 )-41*3- abs(-4)-62 /2";
    Pattern p = Pattern.compile("[\\+\\-/\\*][^\\+\\-\\*/\\(]+(\\([^\\(\\)]*\\))?");

    Matcher m = p.matcher(input);
    while (m.find()) {
        parts.add(m.group());
    }

如果你想要一个你不能做的阵列:

    parts.toArray(new String[parts.size()]);

这将为您提供一个简单的String数组。我正在使用Java Collections来处理数组创建,因为在解析String之前无法知道数组的大小

关于这个正则表达式的解释: [\\+\\-/\\*]查找运营商标志 [^\\+\\-\\*/\\(]+查找除运算符和左括号之外的所有内容 (\\([^\\(\\)]*\\))?查找没有嵌套括号的括号内容

此代码给出:

+2
+ sqrt(25 )
-41
*3
- abs(-4)
-62 
/2

如果你需要嵌套的括号,那么你需要实现一个Parser,我让你谷歌吧。