import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Author: yangyubing * @Description: * @Date: 11:11 2019/12/9 */ public class Test { public static void main(String[] args) { String str = "张三(zhangsan),李四(lisi)"; System.out.println(clearBracket(str)); String msg = "PerformanceManager[第1个中括号]Product[第2个中括号]<[第3个中括号]79~"; List<String> string = extractMessageByRegular(msg); System.out.println(string); System.out.println(xiaokuohao(str)); } public static List<String> xiaokuohao(String str) { Pattern p1 = Pattern.compile("\\([^)(]*\\)"); Matcher m = p1.matcher(str); ArrayList<String> list = new ArrayList<String>(); while (m.find()) { list.add(m.group().trim().replace("(", "").replace(")", "")); } return list; } /** * 使用正则表达式提取中括号中的内容 */ public static List<String> extractMessageByRegular(String msg) { List<String> list = new ArrayList<String>(); Pattern p = Pattern.compile("(\\[[^\\]]*\\])"); Matcher m = p.matcher(msg); while (m.find()) { list.add(m.group().substring(1, m.group().length() - 1)); } return list; } /** * 提出小括号外面的内容 * @param context * @return */ public static String clearBracket(String context) { int head = context.indexOf('('); if (head == -1) { return context; } else { int next = head + 1; // 从head+1起检查每个字符 int count = 1; // 记录括号情况 do { if (context.charAt(next) == '(') { count++; } else if (context.charAt(next) == ')') { count--; } next++; // 更新即将读取的下一个字符的位置 if (count == 0) { // 已经找到匹配的括号 String temp = context.substring(head, next); context = context.replace(temp, ""); // 用空内容替换,复制给context head = context.indexOf('('); // 找寻下一个左括号 next = head + 1; // 标记下一个左括号后的字符位置 count = 1; // count的值还原成1 } } while (head != -1); // 如果在该段落中找不到左括号了,就终止循环 } return context; // 返回更新后的context } }
(非原创,只是记录,方便日后使用)