String applyPatternRepeatedly(@Nonnull Pattern pattern, @Nonnull String filename, @Nonnull Function<String, Character> converter) { StringBuilder id = new StringBuilder(); int beginIndex = 0; Matcher matcher = pattern.matcher(filename); while (matcher.find()) { String group = matcher.group(); id.append(filename, beginIndex, matcher.start()); id.append(converter.apply(group)); beginIndex = matcher.end(); } id.append(filename.substring(beginIndex)); return id.toString(); }
public static void printMatches(String text, String regex) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(text); // Check all occurrences while (matcher.find()) { System.out.print("Start index: " + matcher.start()); System.out.print(" End index: " + matcher.end()); System.out.println(" Found: " + matcher.group()); } }
@Override protected Result[] run(String value) { final Matcher matcher = pattern.matcher(value); if (!matcher.find() || matcher.groupCount() == 0 || matcher.start(1) == -1 || matcher.end(1) == -1) { return null; } return new Result[] { new Result(value.substring(matcher.start(1), matcher.end(1)), matcher.start(1), matcher.end(1)) }; }
@Override public void describeTo(Description description) { java.util.regex.Matcher arg = ARG_PATTERN.matcher(descriptionTemplate); int textStart = 0; while (arg.find()) { description.appendText(descriptionTemplate.substring(textStart, arg.start())); description.appendValue(values[parseInt(arg.group(1))]); textStart = arg.end(); } if (textStart < descriptionTemplate.length()) { description.appendText(descriptionTemplate.substring(textStart)); } }
/** * Expand URI template variables in the target URL with either model * attribute values or as a fallback with URI variable values from the * current request. Values are encoded. */ protected StringBuilder expandTargetUrlTemplate(String targetUrl, Map<String, Object> model, Map<String, String> uriVariables) { Matcher matcher = URI_TEMPLATE_VARIABLE_PATTERN.matcher(targetUrl); boolean found = matcher.find(); if (!found) { return new StringBuilder(targetUrl); } StringBuilder result = new StringBuilder(); int endLastMatch = 0; while (found) { String name = matcher.group(1); Object value = (model.containsKey(name) ? model.get(name) : uriVariables.get(name)); Assert.notNull(value, () -> "No value for URI variable '" + name + "'"); result.append(targetUrl.substring(endLastMatch, matcher.start())); result.append(encodeUriVariable(value.toString())); endLastMatch = matcher.end(); found = matcher.find(); } result.append(targetUrl.substring(endLastMatch, targetUrl.length())); return result; }
private Pattern createUriPattern() { String patternUri = uri; Matcher matcher = PARAM_PATTERN.matcher(patternUri); int start = 0; while (matcher.find(start)) { uriParams.add(patternUri.substring(matcher.start() + 1, matcher.end())); patternUri = new StringBuilder(patternUri.substring(0, matcher.start()))// .append(PARAM_MATCHER)// .append(patternUri.substring(matcher.end())).toString(); start = matcher.start() + PARAM_MATCHER.length(); matcher = PARAM_PATTERN.matcher(patternUri); } return Pattern.compile(patternUri); }
public static FeatureTemplate create(String template) { FeatureTemplate featureTemplate = new FeatureTemplate(); featureTemplate.delimiterList = new LinkedList<String>(); featureTemplate.offsetList = new ArrayList<int[]>(3); featureTemplate.template = template; Matcher matcher = pattern.matcher(template); int start = 0; while (matcher.find()) { featureTemplate.delimiterList.add(template.substring(start, matcher.start())); start = matcher.end(); featureTemplate.offsetList.add(new int[]{Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))}); } return featureTemplate; }
@Override public void describeTo(Description description) { java.util.regex.Matcher arg = ARG_PATTERN.matcher(descriptionTemplate); int textStart = 0; while (arg.find()) { description.appendText(descriptionTemplate.substring(textStart, arg.start())); description.appendValue(values[parseInt(arg.group(1))]); textStart = arg.end(); } if (textStart < descriptionTemplate.length()) { description.appendText(descriptionTemplate.substring(textStart)); } }
private static String findFirstRegexMatch(String regex, String stringToSearch) { String result = ""; Pattern pattern = Pattern.compile(regex); Matcher stringToSearchMatcher = pattern.matcher(stringToSearch); if (stringToSearchMatcher.find()) { result = stringToSearch.substring(stringToSearchMatcher.start(), stringToSearchMatcher.end()); } return result; }
private static Set<Range<Integer>> extractRange(List<String> highlights) { final ImmutableSet.Builder<Range<Integer>> builder = ImmutableSet.builder(); highlights.forEach(highlight -> { final Matcher matcher = highlightPattern.matcher(highlight); Integer count = -1; while (matcher.find()) { count++; final Integer start = matcher.start() - count * (startTokenLength + endTokenLength); final Integer end = start + (matcher.end(1) - matcher.start(1)); builder.add(Range.closed(start, end)); } }); return builder.build(); } }
/** * Replace URI template variables in the target URL with encoded model * attributes or URI variables from the current request. Model attributes * referenced in the URL are removed from the model. * @param targetUrl the redirect URL * @param model a Map that contains model attributes * @param currentUriVariables current request URI variables to use * @param encodingScheme the encoding scheme to use * @throws UnsupportedEncodingException if string encoding failed */ protected StringBuilder replaceUriTemplateVariables( String targetUrl, Map<String, Object> model, Map<String, String> currentUriVariables, String encodingScheme) throws UnsupportedEncodingException { StringBuilder result = new StringBuilder(); Matcher matcher = URI_TEMPLATE_VARIABLE_PATTERN.matcher(targetUrl); int endLastMatch = 0; while (matcher.find()) { String name = matcher.group(1); Object value = (model.containsKey(name) ? model.remove(name) : currentUriVariables.get(name)); if (value == null) { throw new IllegalArgumentException("Model has no value for key '" + name + "'"); } result.append(targetUrl.substring(endLastMatch, matcher.start())); result.append(UriUtils.encodePathSegment(value.toString(), encodingScheme)); endLastMatch = matcher.end(); } result.append(targetUrl.substring(endLastMatch, targetUrl.length())); return result; }