From dd82b58dadce3721da80ae2170f314c046aa290d Mon Sep 17 00:00:00 2001
From: Joel Dice <git@seibutsu.mailsnare.net>
Date: Wed, 12 Aug 2009 19:39:29 -0600
Subject: [PATCH] add String.lastIndexOf(String,int); defer to Pattern.split in
 String.split

---
 classpath/java/lang/String.java | 50 ++++++++-------------------------
 1 file changed, 11 insertions(+), 39 deletions(-)

diff --git a/classpath/java/lang/String.java b/classpath/java/lang/String.java
index 79dcc8ee75..1ecb53629c 100644
--- a/classpath/java/lang/String.java
+++ b/classpath/java/lang/String.java
@@ -357,9 +357,13 @@ public final class String
   }
 
   public int lastIndexOf(String s) {
-    if (s.length == 0) return length;
+    return lastIndexOf(s, length - s.length);
+  }
 
-    for (int i = length - s.length; i >= 0; --i) {
+  public int lastIndexOf(String s, int lastIndex) {
+    if (s.length == 0) return lastIndex;
+
+    for (int i = Math.min(length - s.length, lastIndex); i >= 0; --i) {
       int j = 0;
       for (; j < s.length && i + j < length; ++j) {
         if (charAt(i + j) != s.charAt(j)) {
@@ -521,44 +525,12 @@ public final class String
     }
   }
 
-  public String[] split(String s) {
-    String[] array = new String[(length / s.length) + 1];
-    int index = 0;
-    int last = 0;
-    int position = 0;
-    for (int i = 0; i < length - s.length + 1;) {
-      int j;
-      for (j = 0; j < s.length; ++j) {
-        if (charAt(i + j) != s.charAt(j)) {
-          break;
-        }
-      }
+  public String[] split(String regex) {
+    return split(regex, 0);
+  }
 
-      if (j == s.length) {
-        if (i > 0) {
-          if (i > position) {
-            last = index;
-          }
-          array[index++] = substring(position, i);
-        }
-        i = position = i + s.length;
-      } else {
-        ++ i;
-      }
-    }
-
-    if (position < length) {
-      last = index;
-      array[index] = substring(position, length);
-    }
-
-    if (last + 1 < array.length) {
-      String[] a = new String[last + 1];
-      System.arraycopy(array, 0, a, 0, last + 1);
-      array = a;
-    }
-
-    return array;
+  public String[] split(String regex, int limit) {
+    return Pattern.compile(regex).split(this, limit);
   }
 
   public CharSequence subSequence(int start, int end) {