Индекс строки вне диапазона, преобразование массива строки в массив символов - PullRequest
0 голосов
/ 30 апреля 2020

Поэтому я пытаюсь преобразовать массив строк в массив символов и продолжаю сталкиваться с этой ошибкой: Исключение в потоке "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 ]

1 голос
/ 30 апреля 2020

Вот простая программа с массивом строк. Сначала мы создаем счетчик и берем сумму всех 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);
     }

Это решение вашей проблемы.

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



    }
0 голосов
/ 30 апреля 2020

Метод charAt () возвращает символ по указанному индексу. Обратите внимание, что значение индекса должно быть l ie между 0 и length () - 1.

Так что, если, скажем, данный индекс равен длине строки, т.е. length (), вы получите java.lang.StringIndexOutOfBoundsException.

0 голосов
/ 30 апреля 2020

Java В строках уже есть встроенный метод для преобразования строки в массив символов. Проверьте String.toCharArray ().


Вы создали массив char такой же длины, что и массив String. Длина массива Char должна быть суммой длин всех строк.

Кроме того, ваше гнездо для l oop неверно. Должно быть что-то вроде:

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);
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...