Java 字符串索引超出范围,正在将字符串数组转换为字符数组

Java 字符串索引超出范围,正在将字符串数组转换为字符数组,java,arrays,Java,Arrays,因此,我试图将字符串数组转换为字符数组,但始终遇到以下错误:线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:16。我甚至试图增加我的数组大小,但这种情况一直在发生 存储在数组中的文件中的字符串长度正好为16个字符。那也许是错误 “keyChar[i]+=ht[j].charAt(i);”这一行是抛出错误的地方。 更新代码: 现在它可以工作了,但只需要遍历8个字符串和128个字符 public class Lab4 {

因此,我试图将字符串数组转换为字符数组,但始终遇到以下错误:线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:16。我甚至试图增加我的数组大小,但这种情况一直在发生

存储在数组中的文件中的字符串长度正好为16个字符。那也许是错误

“keyChar[i]+=ht[j].charAt(i);”这一行是抛出错误的地方。 更新代码:

现在它可以工作了,但只需要遍历8个字符串和128个字符

public class Lab4 {
public static void print(Object printed) {
    System.out.print(printed);
}
public static void main(String[] args) throws FileNotFoundException{
    File dataSet = new File("data.txt");
    Scanner fileRead = new Scanner(dataSet);
    int index = 0;
    int tableSize = 128;
    String[] ht = new String[tableSize]; 

    int cCounter = 0;
    String key = "";

    while (fileRead.hasNextLine() && index < ht.length) {
        ht[index] = fileRead.nextLine();
        index++;
    }

    for(int i = 0; i < ht.length; i++) {
        cCounter += ht[i].length();

    }

    char[] keyChar = new char[cCounter];

    int charIndex = 0;
    for(int i = 0; i < ht.length; i++) {
        for  (int j = 0; j < ht[i].length(); j++) {
            keyChar[charIndex] = ht[i].charAt(j);
            charIndex++;
        }
    }

    for (int i = 0; i < ht.length; i++) {
        print(keyChar[i]);
    }
    //long HA = abs(keyChar[1]) + (abs(key[3] + key[4]) + abs(key[12] + key[13])) / 65535 + abs(key[15]);
    print(cCounter + " " + ht.length);

}

Java字符串已经有一个内置的方法将字符串转换为字符数组。签出String.toCharArray()


您已经创建了与字符串数组长度相同的字符数组。字符数组长度应该是所有字符串长度的总和

此外,您的nest for循环是错误的。应该是这样的:

int charIndex = 0; // To keep track of char Array
for(int i = 0; i < ht.length; i++){ // Iterate over all Strings
        for(int j = 0; j < ht[i].length(); i++){
            keyChar[charIndex] = ht[i].charAt(j);
        }
}
int charIndex=0;//跟踪字符数组的步骤
对于(int i=0;i
charAt()方法返回指定索引处的字符。请注意,索引值应介于0和length()之间


因此,如果给定的索引等于字符串的长度,即length(),您将得到
java.lang.StringIndexOutOfBoundsException

,下面是一个包含字符串数组的简单程序。首先,我们创建计数器并获取给定数组中所有String.leght()的总和。然后我们创建具有该长度的字符数组,并简单地迭代和填充数组

public static void main(String []args){
        int index = 0;
        String[] ht = new String[3]; 
        int counter = 0;


        ht[0] = "Hello";
        ht[1] = "World";
        ht[2] = "Johm";

        for(int i = 0; i < ht.length; i++) {
                counter += ht[i].length();

        }
        char[] keyChar = new char[counter];

        for(int i = 0; i < ht.length; i++) {
            for  (int j = 0; j < ht[i].length(); j++) {
                keyChar[index] = ht[i].charAt(j);
                index++;
            }
        }

        System.out.println(keyChar);
     }
publicstaticvoidmain(字符串[]args){
int指数=0;
字符串[]ht=新字符串[3];
int计数器=0;
ht[0]=“你好”;
ht[1]=“世界”;
ht[2]=“Johm”;
对于(int i=0;i
这是你问题的解决方案

 public static void main(String[] args) throws FileNotFoundException {
        File dataSet = new File("data.txt");
        Scanner fileRead = new Scanner(dataSet);
        int index = 0;
        int index2 = 0;
        int tableSize = 128;
        String[] ht = new String[tableSize];


        while (fileRead.hasNextLine() && index < ht.length) {
            ht[index] = fileRead.nextLine();
            index++;
        }

        int counter = 0;

        for(int i = 0; i < ht.length; i++) {
            counter += ht[i].length();

        }
        char[] keyChar = new char[counter];

        for(int i = 0; i < ht.length; i++) {
            for  (int j = 0; j < ht[i].length(); j++) {
                keyChar[index2] = ht[i].charAt(j);
                index2++;
            }
        }

        System.out.println(keyChar);



    }
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
文件数据集=新文件(“data.txt”);
扫描仪文件读取=新扫描仪(数据集);
int指数=0;
int index2=0;
int tableSize=128;
String[]ht=新字符串[表大小];
while(fileRead.hasNextLine()&&index
为了更好地回答您的问题,请您将我添加到文件中的文件内容张贴出来,该文件确实有效。谢谢!我现在唯一的问题是它只会上升到数组的第8个字符串。我看不出它有任何明显的问题?它只循环到128个字符,而总和应该是2048。@Taziamomamabraham用新代码更新了你的问题,我做到了,但仍然掌握了诀窍。@Taziamomamabraham我更新了答案的第二部分,专门针对你的代码。我不知道你犯了什么错误,我只是创建了我的代码。如果你发现了什么问题,请在底部的问题中添加它,它起作用了!我的问题是我打印字符的循环,我只是把它设置错了。我没有,我可以像那样打印数组而不必循环它。我最初尝试使用字符串.tocharray(),而不是使用字符,但是我遇到了很多复杂的错误。我把线圈修好了,谢谢。
 public static void main(String[] args) throws FileNotFoundException {
        File dataSet = new File("data.txt");
        Scanner fileRead = new Scanner(dataSet);
        int index = 0;
        int index2 = 0;
        int tableSize = 128;
        String[] ht = new String[tableSize];


        while (fileRead.hasNextLine() && index < ht.length) {
            ht[index] = fileRead.nextLine();
            index++;
        }

        int counter = 0;

        for(int i = 0; i < ht.length; i++) {
            counter += ht[i].length();

        }
        char[] keyChar = new char[counter];

        for(int i = 0; i < ht.length; i++) {
            for  (int j = 0; j < ht[i].length(); j++) {
                keyChar[index2] = ht[i].charAt(j);
                index2++;
            }
        }

        System.out.println(keyChar);



    }