StringUtils.replaceEach используется для замены строк, альтернатива replaceEach для регулярных выражений. ⇐ JAVA
StringUtils.replaceEach используется для замены строк, альтернатива replaceEach для регулярных выражений.
String str = "демо-тест временного теста демо-тест"; Map regexMap = new LinkedHashMap(); regexMap.put("te.t", демо); regexMap.put("de.o", Rampage); вывод: temp demo Rampage demo Ramage. Если существует список регулярных выражений, которые необходимо применить к одной строке, как мы можем этого добиться? Есть ли какой-нибудь API, который будет работать именно с регулярными выражениями, как StringUtils.replaceEach() работает со строками?
Что можно улучшить в этом коде?
String replaceFixedSubString(Map regexPatternVsValueMap, String AttributeValue) { Map groupVsPatternMap = new HashMap(); StringBuilder FinalValue = новый StringBuilder(); Строка regexJoinOr = Strings.join(regexPatternVsValueMap.keySet(), "|"); Шаблон скомпилированPattern = Pattern.compile(regexJoinOr); Сопоставитель = компиляторPattern.matcher(attributeValue); в то время как (matcher.find()) { Строковый ключ = keyResolution(regexPatternVsValueMap.keySet(), matcher.group(), groupVsPatternMap); Строковое значение = regexPatternVsValueMap.get(key); matcher.appendReplacement(finalValue, Matcher.quoteReplacement(value == null ? "" : value)); } matcher.appendTail(finalValue); вернуть FinalValue.toString(); } Private String keyResolution (Set keySet, String group, Map groupVsPatternMap) { Строка factKey = groupVsPatternMap.getOrDefault(группа, группа); если (actualKey.equals(группа)) { for (Строковый ключ: keySet) { if (key.length() == group.length()) { если (key.startsWith(String.valueOf(group.charAt(0))) && key.endsWith(String.valueOf(group.charAt(group.length() - 1)))) { фактический ключ = ключ; перерыв; } } } groupVsPatternMap.put(группа, factKey); } вернуть фактический ключ; } общественный недействительный AlphaNumericRegexTest () { System.out.println("Алфавитно-цифровое регулярное выражение запущено"); Map charVsCharCorpusList = новый HashMap(); charVsCharCorpusList.put("[^0-9a-zA-Z]+", ""); charVsCharCorpusList.put("d..o", "модем"); charVsCharCorpusList.put("м...м", "современный"); String atrValue = "!#$A%m^a&z./on 123 demo! модем"; Строка StandardizeValue = replaceFixedSubString(charVsCharCorpusList, atrValue.toLowerCase()); Ожидаемый результат строки = "amazon123modemmodern"; Assert.assertEquals(expectedResult,standardizeValue); }
String str = "демо-тест временного теста демо-тест"; Map regexMap = new LinkedHashMap(); regexMap.put("te.t", демо); regexMap.put("de.o", Rampage); вывод: temp demo Rampage demo Ramage. Если существует список регулярных выражений, которые необходимо применить к одной строке, как мы можем этого добиться? Есть ли какой-нибудь API, который будет работать именно с регулярными выражениями, как StringUtils.replaceEach() работает со строками?
Что можно улучшить в этом коде?
String replaceFixedSubString(Map regexPatternVsValueMap, String AttributeValue) { Map groupVsPatternMap = new HashMap(); StringBuilder FinalValue = новый StringBuilder(); Строка regexJoinOr = Strings.join(regexPatternVsValueMap.keySet(), "|"); Шаблон скомпилированPattern = Pattern.compile(regexJoinOr); Сопоставитель = компиляторPattern.matcher(attributeValue); в то время как (matcher.find()) { Строковый ключ = keyResolution(regexPatternVsValueMap.keySet(), matcher.group(), groupVsPatternMap); Строковое значение = regexPatternVsValueMap.get(key); matcher.appendReplacement(finalValue, Matcher.quoteReplacement(value == null ? "" : value)); } matcher.appendTail(finalValue); вернуть FinalValue.toString(); } Private String keyResolution (Set keySet, String group, Map groupVsPatternMap) { Строка factKey = groupVsPatternMap.getOrDefault(группа, группа); если (actualKey.equals(группа)) { for (Строковый ключ: keySet) { if (key.length() == group.length()) { если (key.startsWith(String.valueOf(group.charAt(0))) && key.endsWith(String.valueOf(group.charAt(group.length() - 1)))) { фактический ключ = ключ; перерыв; } } } groupVsPatternMap.put(группа, factKey); } вернуть фактический ключ; } общественный недействительный AlphaNumericRegexTest () { System.out.println("Алфавитно-цифровое регулярное выражение запущено"); Map charVsCharCorpusList = новый HashMap(); charVsCharCorpusList.put("[^0-9a-zA-Z]+", ""); charVsCharCorpusList.put("d..o", "модем"); charVsCharCorpusList.put("м...м", "современный"); String atrValue = "!#$A%m^a&z./on 123 demo! модем"; Строка StandardizeValue = replaceFixedSubString(charVsCharCorpusList, atrValue.toLowerCase()); Ожидаемый результат строки = "amazon123modemmodern"; Assert.assertEquals(expectedResult,standardizeValue); }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение