纬度打击 2020-12-08 13:13 采纳率: 88.9%
浏览 50
已采纳

写一个新的split()方法,返回包括符号的字符串组

public class newSplit {

    public static void main(String[] args) {
        String str = "jfjabd/sdjkf=dbvbva!vnjv_";
        String[] S = split(str, "[/=!_]");
        for (int i = 0; i < S.length; i++) {
            System.out.println(S[i]);
        }
    }

    public static String[] split(String s, String regex) {
        String[] Regex = new String[0];

        for (int i = 0; i < regex.length(); i++) {
            for (int j = 0; j < s.length(); j++) {
                if (s.charAt(j) == regex.charAt(i)) {
                    Regex = append(String.valueOf(regex.charAt(i)), Regex);
                }
            }

        }
        String re = "[" + regex + "]";
        String[] S = s.split(re);

        String[] ret = new String[S.length + Regex.length];

            if (s.charAt(0) == regex.charAt(0)) {
                if (s.charAt(s.length()-1) == regex.charAt(regex.length()-1)) {
                    for (int i = 0; i < ret.length; i++) {
                        ret[i] = Regex[i];
                        ret[i + 1] = S[i];
                    }
                    ret[ret.length-1]=String.valueOf(regex.charAt(regex.length()-1));
                }
                else{
                    for (int i = 0; i < ret.length; i++) {
                        ret[i] = Regex[i];
                        ret[i + 1] = S[i];
                    }
                }
            }
            else{
                if (s.charAt(s.length()-1) == regex.charAt(regex.length()-1)) {
                    for (int i = 0; i < ret.length; i++) {
                        ret[i] = S[i];
                        ret[i + 1] = Regex[i];
                    }
                }
                else{
                    for (int i = 0; i < ret.length; i++) {
                        ret[i] = S[i];
                        ret[i + 1] = Regex[i];
                    }
                    ret[ret.length-1]=S[S.length-1];

                }
            }


        return ret;
    }

    //在String[]插入一个元素。
    public static String[] insert(String str, String[] s, int index) {
        String[] newString = new String[s.length + 1];
        for (int i = 0; i < s.length; i++) {
            newString[i] = s[i];
        }
        newString[s.length] = "";
        String tem = "";

        for (int i = index; i < newString.length; i++) {
            tem = newString[i];
            newString[i] = str;
            str = tem;
        }

        return newString;

    }

    //在int[]插入一个元素。
    public static int[] insert(int str, int[] s, int index) {
        int[] newString = new int[s.length + 1];
        for (int i = 0; i < s.length; i++) {
            newString[i] = s[i];
        }
        newString[s.length] = 0;
        int tem;

        for (int i = index; i < newString.length; i++) {
            tem = newString[i];
            newString[i] = str;
            str = tem;
        }

        return newString;

    }

    //将字符串加到字符串数组的末尾。
    public static String[] append(String str, String[] STR) {
        return insert(str, STR, STR.length);
    }

}

错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
    at newSplit.split(newSplit.java:54)
    at newSplit.main(newSplit.java:8)

Process finished with exit code 1

  • 写回答

1条回答 默认 最新

  • 阿飞คิดถึง 2020-12-09 11:59
    关注

    数组越界了,打个断点就晓得了ret.length=8,s.length = 4 ,第45行肯定会有问题啊

     ret[i] = S[i];
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏