public String split(String input) {
        StringBuffer output = new StringBuffer(2 * input.length());
        int pos = 0;
        matcher = pattern.matcher(input);
        while (matcher.find()) {
            output.append(input.charAt(pos));
            switch (getGroup()) {
                case RULE_7:
                    output.append(input.charAt(++pos));
                case RULE_4:
                case RULE_5:
                case RULE_8:
                    output.append(sep);
                    break;
                default:
                    break;
            }
            matcher.region(++pos, matcher.regionEnd());
        }
        return output.toString();
    }