Java字符串由逗号分隔

时间:2011-05-10 16:13:48

标签: java

我在下面有这个代码,它给了我这个输出

1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,
[Ljava.lang.String;@3e25a5
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f
[I@19821f

input.txt文件包含1,2,3,4,3,4,5,4,3,5,3,4,5,5,4,64,

代码是这样的。很明显,分裂存在一个简单的错误,但我发现很难找到它。

public static void main(String[] args) {
    // TODO Auto-generated method stub



    try{
        FileInputStream fstream = new FileInputStream("input.txt");
        DataInputStream  dat = new DataInputStream (fstream);
        BufferedReader in = new BufferedReader(new InputStreamReader(dat));
        String[] str ;

        int arr[] = new int [100];


        String line;

        while ((line = in.readLine()) != null)
            {

                System.out.println(line);
                str = line.split(",");
                System.out.println(str);

                for(int i = 0 ;i<str.length ; i++)
                {
                    arr[i]= Integer.parseInt(str[i]);
                    System.out.println(arr);
                }
            }

        fstream.close();

    }

    catch(IOException e)
    {
        System.out.print(e);
    }


}

5 个答案:

答案 0 :(得分:8)

更改此

   System.out.println(arr);

   System.out.println(arr[i]);

在打印数组arr之前,而不是数组的元素。

答案 1 :(得分:3)

看起来你反复打印数组,这将导致Java调用数组的toString()方法,这将为你提供类似于你提供的输出。

要解决此问题,请尝试将循环更改为:

for(int i = 0 ;i<str.length ; i++)
{
    arr[i]= Integer.parseInt(str[i]);
    System.out.println(arr[i]];
}

为了让您更清楚地知道发生了什么,这个程序会做类似的事情:

public class Test {
    public static void main(String[] args) {
        System.out.println(new int[0]);
    }
}

将输出:

[I@164f1d0d

答案 2 :(得分:2)

中打印出数组
 System.out.println(arr);

您有效地打印出Object,恰好是Array对象。这有一个toString()方法,它会打印出对象的Classhashcode()引用。

现在,由于您的数组是原始类型,它看起来像这样

[I@19821f

每个项目意味着什么

[ => "an array of"
I => "primitive integer"
@19821f => "which has a hashcode of 0x19821f"

请注意,这是一个默认的约定,这意味着虽然它正是您所看到的,但您不能指望这种阅读技术具有相同的单词保证意义。

与前面提到的许多人一样,你需要打印出数组的元素(不会使用这个伪对象toString()表示,因为元素是一个整数。

答案 3 :(得分:0)

删除不必要的sysout以获得准确的输出。并且在最后一个sysout中打印元素不完整的数组。

答案 4 :(得分:-2)

str = line.split(",");

如果字符串包含逗号,则不应使用split()