java如何提取中括号前面的内容,以及中括号内部内容?

test[10000]

我想取出10000 以及前面的test

怎么定位,因前面的test长度不是固定的,

阅读 2.3k
6 个回答

95% 以上的文本查找,替换,匹配相关的需求都可以通过正则表达式解决。

import java.util.regex.*;

class Test {
        
    public static void main(String[] args) {
        Pattern x = Pattern.compile("(.+)\\[(.+)\\]", Pattern.DOTALL);
        
        String[] testTexts = {
            "aaaaaaa[bbbbbbb]",
            "测试测试[文本文本]",
            "2321]][2312[231231]"
        };
        
        for (String testText : testTexts) {
            Matcher m = x.matcher(testText);
            if (m.matches()) {
                System.out.println(String.format("source: %s, group 1: %s, group 2: %s", testText, m.group(1), m.group(2)));
            } else {
                System.out.println(String.format("source: %s, not match", testText));
            }
        }
        
        
    }
}

看来用java的人好少啊
自己解决了,不知道还有没有更高效的。请指教


 (sarr[0].substring(0,sarr[0].indexOf("[")));
(sarr[0].substring(sarr[0].indexOf("[")+1,sarr[0].indexOf("]")));

可以用split,匹配"["或者"]"

String[] tmp = sarr.split("\\[|\\]");

如果,只是类似你这个字符串,是个类似数组的变量名,是简单的 \w+就可以了, 主要是你没有说清楚,这个字符串是单独的一个字符串,还是在一堆文本需要提取出来的字符串

final String regex = "\\w+";
    final String string = "test[1000]";
    
    final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    final Matcher matcher = pattern.matcher(string);
//matcher.group(0) test
//mathcher.group(1) 1000
    static String cutOut(String s, String leftBoundary, String rightBoundary) {
      int startIndex = s.indexOf(leftBoundary);
      int endIndex = s.lastIndexOf(rightBoundary);
      if (startIndex >= 0 && endIndex > startIndex) {
        return s.substring(startIndex + 1, endIndex);
      }
      return null;
    }

Playground: 3yz2mekfw - Java - OneCompiler

不用正则表达式的O(n)复杂度;

    static String cutOut(String s) {
      StringBuilder out = new StringBuilder();
      StringBuilder in = new StringBuilder();
      boolean isOut = true;
      char[] sc = s.toCharArray();
      for( int i = 0 ; i< sc.length; i ++){
        if( sc[i] == '[') isOut = false;
        else if( sc[i] == ']') isOut = true;
        else {
          if( isOut ) out.append(sc[i]);
          else in.append(sc[i]);
        }
      }
      return isOut? in.toString() : "";
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题