2

所以我正在研究一个由于某些原因仅限于 java squawk 1.4 的项目。因此,String该类不包含标题中的四个方法。我在我的程序中需要这些方法,并得出结论,我必须创建一个 Util 类来自行执行这些方法的功能。

首先,这是否存在于某个地方?显然,我的第一反应是考虑从String类中复制源代码,但是这些方法的依赖关系太深了,我无法使用。

其次,我无法复制split(String regex)and的行为replace(CharSequence target, CharSequence replacement)contains(String)显然很容易,isEmpty()但我在编写其他代码时遇到了麻烦。

现在,我split正在工作(尽管它的工作方式与 jdk 7 中的不同,我不想得到错误)。

public static String[] split(String string, char split) {
    String[] s = new String[0];
    int count = 0;
    for (int x = 0; x < string.length(); x++) {
        if (string.charAt(x) == split) {
            String[] tmp = s;
            s = new String[++count];
            System.arraycopy(tmp, 0, s, 0, tmp.length);
            s[count - 1] = string.substring(x).substring(1);
            if (contains(s[count - 1], split + "")) {
                s[count - 1] = s[count - 1].substring(0, s[count - 1].indexOf(split));
            }
        }
    }
    return s.length == 0 ? new String[]{string} : s;
}

Replace很难做到,我已经尝试了几个小时。这似乎是谷歌/档案馆从未尝试过的问题。

4

1 回答 1

0

做了方法...

public static boolean isEmpty(String string) {
    return string.length() == 0;
}

public static String[] split(String string, char split) {
    return _split(new String[0], string, split);
}

private static String[] _split(String[] current, String string, char split) {
    if (isEmpty(string)) {
        return current;
    }
    String[] tmp = current;
    current = new String[tmp.length + 1];
    System.arraycopy(tmp, 0, current, 0, tmp.length);
    if (contains(string, split + "")) {
        current[current.length - 1] = string.substring(0, string.indexOf(split));
        string = string.substring(string.indexOf(split) + 1);
    } else {
        current[current.length - 1] = string;
        string = "";
    }
    return _split(current, string, split);
}

public static boolean contains(String string, String contains) {
    return string.indexOf(contains) > -1;
}

public static String replace(String string, char replace, String replacement) {
    String[] s = split(string, replace);

    String tmp = "";
    for (int x = 0; x < s.length; x++) {
        if (contains(s[x], replace + "")) {
            tmp += s[x].substring(1);
        } else {
            tmp += s[x];
        }
    }
    return tmp;
}
于 2012-10-28T03:46:02.273 回答