我正在尝试解析String“2 2 2”并在ArrayList中添加每个符号“2”。 这是我的代码:
charCounter = 0;
rawSize = 0;
while(charCounter < line.length()){
a_char = line.charAt(charCounter);
if(a_char != ' '){
System.out.print(String.valueOf(a_char)+" ");
temp = Character.digit(a_char, 10);
myIntArray.add(temp);
System.out.println(String.valueOf(myIntArray.get(rawSize)));
rawSize++;
}
charCounter++;
}
我无法理解为什么System.out.println(String.valueOf(myIntArray.get(rawSize)));
总是返回1?
UPDDATE:
我尝试读取文件,其中包含下一个文本:
1 1 1
2 2 2
3 3 3
这是我的主要功能:
public static void main(String [] args){
char a_char = ' ';
int charCounter = 0;
int temp = 0;
String line = null;
String file = "C:\\Users\\KUser\\Desktop\\SImpleIteration\\matrix.txt";
BufferedReader reader = null;
ArrayList myIntArray = new ArrayList();
try {
reader = new BufferedReader(new FileReader(file));
} catch(FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
}
try {
while ((line = reader.readLine()) != null) {
charCounter = 0;
rawSize = 0;
while(charCounter < line.length()){
a_char = line.charAt(charCounter);
if(a_char != ' '){
System.out.print(String.valueOf(a_char)+" ");
temp = Character.digit(a_char, 10);
myIntArray.add(temp);
System.out.println(String.valueOf(myIntArray.get(rawSize)));
rawSize++;
}
charCounter++;
}
}
} catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
};
我的输出:
1 1
1 1
1 1
2 1
2 1
2 1
3 1
3 1
3 1
当我用a_char = line.charAt(charCounter);
替换a_char = '5';
时,
我的输出:
5 5
5 5
5 5
5 5
5 5
5 5
5 5
5 5
5 5
无法理解为什么会这样。
答案 0 :(得分:1)
使用字符串的split()
方法实现您想要的更简单:
String[] lines = line.split(" ");
for(String s : lines)
myIntArray.add(Integer.parseInt(s))
答案 1 :(得分:1)
我刚刚重写了你的代码以便能够编译它,并且它可以正常工作:
String line = "2 2 2";
ArrayList myIntArray = new ArrayList();
int charCounter = 0;
int rawSize = 0;
while(charCounter < line.length()){
char a_char = line.charAt(charCounter);
if(a_char != ' '){
System.out.print(String.valueOf(a_char)+" ");
int temp = Character.digit(a_char, 10);
myIntArray.add(temp);
System.out.println(String.valueOf(myIntArray.get(rawSize)));
rawSize++;
}
charCounter++;
}
输出:
2 2
2 2
2 2
<强>更新强>
我根据您的更新编辑了我的代码。再次,它正常工作,但String.valueOf(...)
确实总是返回1.这是因为在外部while
中您将rawSize指定为零,因此您将始终打印myIntArray
的前三个元素,这是'1'。尝试打印整个myIntArray
,您会看到它已按预期填充。
P.S。正如另一位响应者建议的那样,实际上有很多更简洁和更好的方法来实现这一点。