rt/emul/mini/src/main/java/java/lang/String.java
changeset 1272 3ee4ec9577bc
parent 926 e5fe6bfca579
child 1310 635ee75d82a5
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/String.java	Thu Apr 04 09:46:06 2013 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/String.java	Mon Sep 09 15:26:12 2013 +0200
     1.3 @@ -2315,8 +2315,35 @@
     1.4       * @spec JSR-51
     1.5       */
     1.6      public String[] split(String regex, int limit) {
     1.7 -        throw new UnsupportedOperationException("Needs regexp");
     1.8 +        if (limit <= 0) {
     1.9 +            Object[] arr = splitImpl(this, regex, Integer.MAX_VALUE);
    1.10 +            int to = arr.length;
    1.11 +            if (limit == 0) {
    1.12 +                while (to > 1 && ((String)arr[--to]).isEmpty()) {
    1.13 +                }
    1.14 +                to++;
    1.15 +            }
    1.16 +            String[] ret = new String[to];
    1.17 +            System.arraycopy(arr, 0, ret, 0, to);
    1.18 +            return ret;
    1.19 +        } else {
    1.20 +            Object[] arr = splitImpl(this, regex, limit);
    1.21 +            String[] ret = new String[arr.length];
    1.22 +            int pos = 0;
    1.23 +            for (int i = 0; i < arr.length; i++) {
    1.24 +                final String s = (String)arr[i];
    1.25 +                ret[i] = s;
    1.26 +                pos = indexOf(s, pos) + s.length();
    1.27 +            }
    1.28 +            ret[arr.length - 1] += substring(pos);
    1.29 +            return ret;
    1.30 +        }
    1.31      }
    1.32 +    
    1.33 +    @JavaScriptBody(args = { "str", "regex", "limit"}, body = 
    1.34 +        "return str.split(new RegExp(regex), limit);"
    1.35 +    )
    1.36 +    private static native Object[] splitImpl(String str, String regex, int limit);
    1.37  
    1.38      /**
    1.39       * Splits this string around matches of the given <a