diff src/luan/modules/StringLuan.java @ 1777:e59349d53fec

optimize String.replace and regex.gsub
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 10 Aug 2023 16:24:20 -0600
parents 7d2ab44f7a59
children 1725fdb6c4f5
line wrap: on
line diff
--- a/src/luan/modules/StringLuan.java	Fri Jul 28 11:53:03 2023 +0300
+++ b/src/luan/modules/StringLuan.java	Thu Aug 10 16:24:20 2023 -0600
@@ -148,12 +148,32 @@
 		Utils.checkNotNull(s2,2);
 		return s.endsWith(s2);
 	}
-
+/*
 	public static String replace(String s,String target,String replacement) throws LuanException {
 		Utils.checkNotNull(s);
 		Utils.checkNotNull(target,2);
 		Utils.checkNotNull(replacement,3);
 		return s.replace(target,replacement);
 	}
+*/
+	public static String replace(String s,String target,String replacement) throws LuanException {
+		Utils.checkNotNull(s);
+		Utils.checkNotNull(target,2);
+		Utils.checkNotNull(replacement,3);
+		int i = s.indexOf(target);
+		if( i == -1 )
+			return s;
+		int starting = 0;
+		int n = target.length();
+		StringBuilder sb = new StringBuilder();
+		do {
+			sb.append(s,starting,i);
+			sb.append(replacement);
+			starting = i + n;
+			i = s.indexOf(target,starting);
+		} while( i != -1 );
+		sb.append(s,starting,s.length());
+		return sb.toString();
+	}
 
 }