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

test[10000]

我想取出10000 以及前面的test

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


回答:

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() : "";

}

以上是 java如何提取中括号前面的内容,以及中括号内部内容? 的全部内容, 来源链接: utcz.com/p/945009.html

回到顶部