Annonceindlæg fra Cognizant
Agentic AI kræver mere end teknologi
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
16. december 2004 - 17:03
#1
Fandt dette eksempel - har ikke testet det, men det ser meget fornuftigt ud:
public static String replace(String s, String oldText, String newText)
{
final int sLength = s.length();
final int oldLength = oldText.length();
final int newLength = newText.length();
if (oldLength == 0)
throw new IllegalArgumentException("cannot replace the empty string");
if (oldText.equals(newText))
return s;
int i = 0;
int x = 0;
StringBuffer sb = new StringBuffer(s);
while ((i = sb.indexOf(oldText, x)) > -1)
{
sb.delete(i, i + oldLength);
sb.insert(i, newText);
x = i + newLength;
}
return sb.toString();
}
link:
http://forum.java.sun.com/thread.jspa?threadID=502816&start=30
16. december 2004 - 17:03
#2
Pick one: public class ReplaceTest { private final static int N = 10000; public static void main(String[] args) { test(new ReplaceRecursiveString()); test(new ReplaceSmartRecursiveString()); test(new ReplaceRecursiveStringBuffer()); test(new ReplaceRecursiveGlobalStringBuffer()); test(new ReplaceLoopString()); test(new ReplaceLoopStringBuffer()); return; } private static void test(Replacer r) { verify(r); perf(r); return; } private static void verify(Replacer r) { if (!r.replaceAll("123<P>456<P>789", "<P>", "\n").equals("123\n456\n789") || !r.replaceAll("<P>123<P>456<P>789<P>", "<P>", "\n").equals("\n123\n456\n789\n") || !r.replaceAll("123<P><P>456", "<P>", "\n").equals("123\n\n456") || !r.replaceAll("<P>", "<P>", "\n").equals("\n") || !r.replaceAll("", "<P>", "\n").equals("")) { System.out.println(r.getMethod() + " failed"); } return; } private static void perf(Replacer r) { System.out.println(r.getMethod() + ":"); perf("short text - few replaces", r, 1000, 5); perf("short text - many replaces", r, 1000, 25); perf("long text - few replaces", r, 10000, 5); perf("long text - many replaces", r, 10000, 25); return; } private static void perf(String title, Replacer r, int txtlen, int nrepl) { StringBuffer sb = new StringBuffer(""); for (int i = 0; i < txtlen; i++) { sb.append('A'); if ((i % (txtlen / nrepl)) == 0) { sb.append("<P>"); } } perf(title, r, sb.toString()); return; } private static void perf(String title, Replacer r, String s) { long t1 = System.currentTimeMillis(); for (int i = 0; i < N; i++) { r.replaceAll(s, "<P>", "\n"); } long t2 = System.currentTimeMillis(); System.out.println(title + " = " + (t2 - t1)); return; } } interface Replacer { public String getMethod(); public String replaceAll(String s, String s1, String s2); } class ReplaceRecursiveString implements Replacer { public String getMethod() { return "Recursive with String"; } public String replaceAll(String s, String s1, String s2) { int ix = s.indexOf(s1); if (ix >= 0) { return replaceAll(s.substring(0, ix) + s2 + s.substring(ix + s1.length()), s1, s2); } else { return s; } } } class ReplaceSmartRecursiveString implements Replacer { public String getMethod() { return "Smart recursive with String"; } public String replaceAll(String s, String s1, String s2) { int ix = s.indexOf(s1); if (ix >= 0) { return (s.substring(0, ix) + s2 + replaceAll(s.substring(ix + s1.length()), s1, s2)); } else { return s; } } } class ReplaceRecursiveStringBuffer implements Replacer { public String getMethod() { return "Recursive with StringBuffer"; } public String replaceAll(String s, String s1, String s2) { int ix = s.indexOf(s1); if (ix >= 0) { StringBuffer tmp = new StringBuffer(""); tmp.append(s.substring(0, ix)); tmp.append(s2); tmp.append(s.substring(ix + s1.length())); return replaceAll(tmp.toString(), s1, s2); } else { return s; } } } class ReplaceRecursiveGlobalStringBuffer implements Replacer { public String getMethod() { return "Recursive with global StringBuffer"; } public String replaceAll(String s, String s1, String s2) { StringBuffer tmp = new StringBuffer(""); replaceAllHelp(tmp, s, s1, s2); return tmp.toString(); } private void replaceAllHelp(StringBuffer res, String s, String s1, String s2) { int ix = s.indexOf(s1); if (ix >= 0) { res.append(s.substring(0, ix)); res.append(s2); replaceAllHelp(res, s.substring(ix + s1.length()), s1, s2); } else { res.append(s); } return; } } class ReplaceLoopString implements Replacer { public String getMethod() { return "Loop with String"; } public String replaceAll(String s, String s1, String s2) { String tmp = new String(""); int pos = 0; while (pos < s.length()) { int ix = s.indexOf(s1, pos); if (ix >= 0) { tmp = tmp + s.substring(pos, ix) + s2; pos = ix + s1.length(); } else { tmp = tmp + s.substring(pos); pos = s.length(); } } return tmp; } } class ReplaceLoopStringBuffer implements Replacer { public String getMethod() { return "Loop with StringBuffer"; } public String replaceAll(String s, String s1, String s2) { StringBuffer tmp = new StringBuffer(""); int pos = 0; while (pos < s.length()) { int ix = s.indexOf(s1, pos); if (ix >= 0) { tmp.append(s.substring(pos, ix)); tmp.append(s2); pos = ix + s1.length(); } else { tmp.append(s.substring(pos)); pos = s.length(); } } return tmp.toString(); } }