因此,我试图将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
答案 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
。