jodd-core/src/main/java/jodd/util/StringUtil.java
public static String replaceIgnoreCase(final String s, final String[] sub, final String[] with) {
		if ((sub.length != with.length) || (sub.length == 0)) {
			return s;
		}
		int start = 0;
		StringBuilder buf = new StringBuilder(s.length());
		while (true) {
			int[] res = indexOfIgnoreCase(s, sub, start);
			if (res == null) {
				break;
			}
			int end = res[1];
			buf.append(s, start, end);
			buf.append(with[res[0]]);
			start = end + sub[0].length();
		}
		buf.append(s.substring(start));
		return buf.toString();
	}
public static String replaceIgnoreCase(final String s, final String[] sub, final String[] with) {
		if ((sub.length != with.length) || (sub.length == 0)) {
			return s;
		}
		int start = 0;
		StringBuilder buf = new StringBuilder(s.length());
		while (true) {
			int[] res = indexOfIgnoreCase(s, sub, start);
			if (res == null) {
				break;
			}
			int end = res[1];
			buf.append(s, start, end);
			buf.append(with[res[0]]);
			start = end + sub[0].length();
		}
		buf.append(s.substring(start));
		return buf.toString();
	}
public static String replaceIgnoreCase ( final String s , final String [ ] sub , final String [ ] with ) { if ( ( sub . length != with . length ) || ( sub . length == 0 ) ) { return s ; } int start = 0 ; StringBuilder buf = new StringBuilder ( s . length ( ) ) ; while ( true ) { int [ ] res = indexOfIgnoreCase ( s , sub , start ) ; if ( res == null ) { break ; } int end = res [ 1 ] ; buf . append ( s , start , end ) ; buf . append ( with [ res [ 0 ] ] ) ; start = end + sub [ 0 ] . length ( ) ; } buf . append ( s . substring ( start ) ) ; return buf . toString ( ) ; }
Replaces many substring at once. Order of string array is important.

@param s      source string
@param sub    substrings array
@param with   replace with array

@return string with all occurrences of substrings replaced
Replaces many substring at once . Order of string array is important .