leo214gamer 2021-11-24 09:45 采纳率: 100%
浏览 141
已结题

Java如何用空格做分割符但不分割[]中的空格

比如:aa bb [cc dd ee] ff
分割成
aa
bb
[cc dd ee]
ff

  • 写回答

4条回答 默认 最新

  • _Mr.Tree 2021-11-24 11:03
    关注

    不存在嵌套[],例如:aa [bb [cc dd]] ee
    不存在类似左右不匹配,例如:aa bb [cc dd ee和aa bb cc] dd ee

    就这样。。。

    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    
    
    public class Test {
        public static void main(String[] args) throws Exception {
            String[] split = split("aa bb [cc dd ee] [ff gg] ee", " ");
            for(String s : split)
                System.out.println(s);
        }
    
        private static String[] split(String str, String regex) throws Exception {
            List<String> resultList = new ArrayList<>();
            if(str == null || str.isEmpty()) return resultList.toArray(new String[0]);
            String[] split = str.split(regex);
            Queue<String> queue = new LinkedList<>();
            for(String s: split){
                if(s.charAt(0) == '[' && s.charAt(s.length() - 1) == ']'){
                    resultList.add(s);
                    continue;
                }
                if(s.charAt(0) == '['){
                    queue.offer(s);
                    continue;
                }
                if(s.charAt(s.length() - 1) == ']'){
                    if(queue.isEmpty())
                        throw new Exception("格式不对");
                    StringBuilder sb = new StringBuilder();
                    while(!queue.isEmpty()){
                        sb.append(queue.poll());
                        sb.append(" ");
                    }
                    sb.append(s);
                    resultList.add(sb.toString());
                    continue;
                }
                if(!queue.isEmpty()) queue.offer(s);
                else resultList.add(s);
            }
            return resultList.toArray(new String[0]);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效