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

时间:2020-04-30 14:20:50

标签: java arrays

因此,我试图将String数组转换为字符数组,并且不断遇到此错误:线程“ 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);

}

}

这是文件的内容:

1234567890123456
Aguirrie        
Alcantara       
Bhandari        
Carmona         
Casper          
Cook            
Daniels         
Nienberg        
Paschal         
Red             
Salkowski       
Zulfiqar        
Qamruddin       
Acevedo         
Ajose           
Arauza          
Buck            
Clark           
Crouch          
Davies          
Dugger          
Egbe            
Ellington       
Farral          
Garza           
Gurung          
Joseph          
Kelly           
Corey           
Adam            
Clayton         
Dustin          
Robert          
Kyle            
Scott           
Octavio         
Judy            
Derek           
Jeffrey         
Jordon          
Vinnela         
Lisa            
Todd            
Veronica        
Matthew         
Michael         
Akhila          
John            
Charles         
James           
Chris           
Wade            
Christopher     
Fernando        
Batbold         
Joel            
Fabulous        
Misogamist      
Maiden          
Eye             
Constriction    
Necromancer     
Syncopate       
Yolk            
Afterwards      
Person          
Northwest       
Irreversible    
Fabricate       
Honor           
Staple          
Under           
Jutty           
Finagle         
Cook            
Rush            
Wine            
Screen          
Perfect         
mole            
parasympathetic 
poison          
brutalize       
cap             
ratiocination   
cauldron        
prepossess      
wince           
orthodontist    
live            
magnetic        
inlet           
constrain       
marsupial       
rationalize     
scat            
toluene         
wet             
sparse          
quandary        
dactyl          
nosegay         
option          
forgetful       
privilege       
sponsor         
exhilarate      
guard           
noggin          
prologue        
seal            
seat            
tiller          
ichthyosaur     
lazy            
malfeasance     
compass         
diastase        
emperor         
history         
keep            
gangway         
labial          
sacrament       
taint           
withal          
oak             
preordain       
haberdasher     
crimp           
luculent        
pennywort       
prevalent       
monolith        
suffrage        
wiper           
zygote          
academy         
amputate        
brash           
consummation    
epicure         
indulgent       
minute          
job             
hypodermic      
meridian        
sinister        
tag             
uterus          
perennial       
humidity        
gynecology      
forego          
interchangeable 
needle          
reach           
urban           
nonunion        
jingle          
feculent        
deciduous       
channel         
decimate        
alarm           
perimeter       
unlucky         
wonderful       
script          
particularity   
mousse          
issue           
graduation      
neutrality      
proxy           
swine           
witticism       
parish          
sickly          
way             
periodic        
mail            
close           
bash            
conclusion      
drive           
foreclose       
habituation     
liberty         
pall            
recite          
empress         
impetuous       
ruminate        
fork            
horizon         
prerequisite    
romance         
sensual         
story           
tuck            
imperialist     
great           
excite          
east            
conclave        
beast           
calico          
beggar          
article         
enemy           
chuck           
critical        
ghost           
dispense        
figure          
algorithm       
bile            
handsome        
cat             
ivy             
impersonal      
pennant         
elephant        
glycerin        
ink             
squid           
pumpkin         
lexicon         
mediocrity      
meet            
alabaster       
morning         
calculator      
speaker         
pacify          
print           
condition       
popcorn         
spank           
moon            
quadrant        
earthquake      
revive          
sculpture       
misbehave       
skeleton        
ligament        
statute         
divisible       
document        
infant          
divot           
conspiracy      
bunt            
notice          

3 个答案:

答案 0 :(得分:1)

这是具有字符串数组的简单程序。首先,我们创建计数器,并对给定数组中的所有String.leght()求和。然后我们创建具有该长度的char数组,然后简单地迭代并填充数组。

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);
     }

这是解决您问题的方法。

 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);



    }

答案 1 :(得分:0)

Java字符串已经具有将字符串转换为字符数组的内置方法。查看String.toCharArray()。


您创建的char数组的长度与String数组的长度相同。字符数组长度应为所有字符串长度的总和。

此外,您的嵌套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);
        }
}

答案 2 :(得分:0)

charAt()方法返回指定索引处的字符。请注意,索引值应介于0和length()-1之间。

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