String.valueOf(Integer)始终返回1

时间:2014-09-06 22:46:42

标签: java string integer

我正在尝试解析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

无法理解为什么会这样。

2 个答案:

答案 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。正如另一位响应者建议的那样,实际上有很多更简洁和更好的方法来实现这一点。