java - Java 子字符串错误索引越界

标签 java

我决定编写自己的 subString 方法,但是当我在测试驱动程序中测试它时,我的 SubString 方法中的某一行收到错误。这是错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(Unknown Source)
at unisa.util.StringImproved.subString(StringImproved.java:618)

这是我的子字符串的代码:

    public String subString(int start, int end) {
    //empty string to append the new string's characters to
    String subString = "";
    //creating a new string to store content to allow function
    String s1 = new String(content);
    //read each character in the string and append based on the index
    for (int i=start; i<=end; i++){
        subString += s1.charAt(i);
    }
    //convert string back to a char array
    content = subString.toCharArray();
    return subString;

}

错误是选取了行 subString += s1.charAt(i);任何人都能够阐明我做错了什么??

PS。这不是为了作业,只是有点无聊,想自己重新创建 java 函数。

提前致谢!!

我已根据要求添加了我的测试方法!!

private int testSubString(String testID) {
    int errorCount=0;



    header(testID);

    {
        System.out.println("Test[getting substring from middle] ");
        StringImproved str = new StringImproved("0123456789");
        String result = str.subString(1,2);
        errorCount+=handleResult(result,"1")?0:1;
    }

    {
        System.out.println("Test[getting first characters] ");
        StringImproved str = new StringImproved("0123456789");
        String result = str.subString(0,2);
        errorCount+=handleResult(result,"01")?0:1;
    }

    {
        System.out.println("Test[getting last characters] ");
        StringImproved str = new StringImproved("0123456789");
        String result = str.subString(str.length()-3,str.length());
        errorCount+=handleResult(result,"789")?0:1;
    }


    {
        System.out.println("Test[out of range] ");
        StringImproved str = new StringImproved("0123456789");
        String result = str.subString(0,str.length()+1);
        errorCount+=handleResult(result,null)?0:1;
    }

    {
        System.out.println("Test[zero length source] ");
        StringImproved str = new StringImproved("");
        String result = str.subString(0,str.length()-1);
        errorCount+=handleResult(result,null)?0:1;
    }
    return errorCount;      
}

最佳答案

数组从零开始

如果您的字符串长度为 N,则索引从 0N - 1(N< 的总长度)。

你的for循环应该是:

                   ↓‎
for (int i=start; i<end; i++) {

示例:

“这是一个测试” 的大小为 14T 位于 0 位置,最后一个t13地点。

<小时/>

正如@sanbhat提到的,你需要检查一些情况,例如,如果content的大小小于end会发生什么?

关于java - Java 子字符串错误索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18942627/

相关文章:

java - MIP 中如何建立来回通信?

java - Eclipse 不会使用声明的源文件夹导出

java - 你能让 JScrollBar 的背景透明吗?

java - 如何使用 hibernate 在数据库中为整数字段设置一个空值?

java - 如何测量 webview 消耗的内存量?

java - 在文本区域中突出显示句子

java - 你怎么知道要使用什么类型的构造函数?

java - 在 Android 上获取当前位置 - 目前仅在第一次应用程序启动时崩溃 [广播错误]

java - IR 发射器和 Android 5.0

java - 在 Eclipse 中默认使类最终化?