All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jtransc.media.limelibgdx.util.ReplaceCallback Maven / Gradle / Ivy

Go to download

JVM AOT compiler currently generating JavaScript, Haxe, with initial focus on Kotlin and games.

There is a newer version: 0.6.7
Show newest version
package com.jtransc.media.limelibgdx.util;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReplaceCallback {
	public interface Callback {
		/**
		 * This function is called when a match is made. The string which was matched
		 * can be obtained via match.group(), and the individual groupings via
		 * match.group(n).
		 */
		String matchFound(MatchResult match);
	}

	/**
	 * Replaces with callback, with no limit to the number of replacements.
	 * Probably what you want most of the time.
	 */
	public static String replace(String pattern, String subject, Callback callback) {
		return replace(pattern, subject, -1, null, callback);
	}

	public static String replace(String pattern, String subject, int limit, Callback callback) {
		return replace(pattern, subject, limit, null, callback);
	}

	/**
	 * @param regex    The regular expression pattern to search on.
	 * @param subject  The string to be replaced.
	 * @param limit    The maximum number of replacements to make. A negative value
	 *                 indicates replace all.
	 * @param count    If this is not null, it will be set to the number of
	 *                 replacements made.
	 * @param callback Callback function
	 */
	public static String replace(String regex, String subject, int limit,
								 AtomicInteger count, Callback callback) {
		StringBuffer sb = new StringBuffer();
		Matcher matcher = Pattern.compile(regex).matcher(subject);
		int i;
		for (i = 0; (limit < 0 || i < limit) && matcher.find(); i++) {
			String replacement = callback.matchFound(matcher.toMatchResult());
			replacement = Matcher.quoteReplacement(replacement); //probably what you want...
			matcher.appendReplacement(sb, replacement);
		}
		matcher.appendTail(sb);

		if (count != null)
			count.set(i);
		return sb.toString();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy