除非字符串中有括号,否则拆分空格。 Java的

时间:2015-10-02 08:48:18

标签: java

例如,让我们说一个字符串如下:" A B(C D)E"

我想将字符串拆分为数组列表,如:

  1. Array1" A"
  2. Array2" B"
  3. Array3" C D"
  4. Array4" E"
  5. 目前它是这样的:

    1. Array1" A"
    2. Array2" B"
    3. Array3"(C"
    4. Array4" D)"
    5. Array5" E"
    6. 这就是我要分割空格的原因:

      Scanner Str = new Scanner(input); 
      if (Str.hasNext())
          for(int i = 0; Str.hasNext(); i++) {
              args.add(i, Str.next());
          }
      

      感谢您的时间

2 个答案:

答案 0 :(得分:2)

我认为你必须处理输入两次。首先,您必须识别括号内的内容,并且必须用新符号替换空格。如果有很多括号,那么它就是在一个循环中完成的。然后,一旦处理括号,就可以拆分String,最后新符号必须用空格替换。所以String会改变如下。

  1. “A B(C D)E”
  2. “A B C | D E”
  3. 然后拆分,替换|并添加到数组列表。

答案 1 :(得分:0)

我希望这能解决你的问题

import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

    public class RegExDemo2 {

        public static void main(String [] args)
        {
            String input = "A B (C D) E";
            String output = input.replaceAll("\\s\\([^)]*?\\)", "").trim();
            ArrayList<String> newoutput = new ArrayList(Arrays.asList(output.split(" ")));
            Pattern p = Pattern.compile("\\((.*?)\\)");
            Matcher m = p.matcher(input);

            while(m.find()) {
                newoutput.add(m.group(1));
            }
            for(String test: newoutput)
            {
                System.out.println("Array "+test);
            }
        }

    }