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