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