字符串工具类

  1. 获取字符串中的括号所在位置

需求场景,记录括号开始和结束的位置


	/**
	 * 

获取对应的括号组位置

* @param string 字符串 * @param symbolLeft 左侧符号 内置三类 ( [ { * @return */
private static LinkedHashMap<Integer, Integer> getBracketPairs(String string, Character symbolLeft) { Map<Character, Character> characterHashMap = new HashMap<>(); characterHashMap.put('(', ')'); characterHashMap.put('[', ']'); characterHashMap.put('{', '}'); Character symbolRight = characterHashMap.get(symbolLeft); if (symbolRight == null || symbolRight.toString().length() < 1) { return new LinkedHashMap<>(); } char[] strArray = string.toCharArray(); //找到所有左右()的位置 ArrayList<Integer> right = new ArrayList<>(); ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < strArray.length; i++) { if (strArray[i] == symbolLeft) { list.add(i); } else if (strArray[i] == symbolRight) { right.add(i); list.add(i); } } LinkedList<Integer> linkedList = new LinkedList<>(); Map<Integer, Integer> integerMap = new HashMap<>(); for (int a : list) { boolean contains = right.stream().anyMatch(x -> x == a); if (!contains) { linkedList.add(a); } else { if (linkedList.size() > 0) { Integer leInt = linkedList.get(linkedList.size() - 1); integerMap.put(leInt, a); linkedList.removeLast(); } } } // return integerMap.entrySet().stream() // .sorted((o1, o2) -> { // int c1 = o1.getValue() - o1.getKey(); // int c2 = o2.getValue() - o2.getKey(); // return Integer.compare(c1, c2); // }) // .collect(LinkedHashMap::new, (map, entry) -> { // map.put(entry.getKey(), entry.getValue()); // }, LinkedHashMap::putAll); return integerMap.entrySet().stream() .sorted((o1, o2) -> { int c1 = o1.getKey(); int c2 = o2.getKey(); return Integer.compare(c1, c2); }) .collect(LinkedHashMap::new, (map, entry) -> { map.put(entry.getKey(), entry.getValue()); }, LinkedHashMap::putAll); }

你可能感兴趣的:(java)