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 } }
(非原創,只是記錄,方便日後使用)