java - 数字格式异常 : Invalid int: "1"

标签 java android algorithm loops .obj

我正在尝试制作一个简单的算法,将 .obj 文件转换为我的程序可以使用的数据。

这是输入字符串数据的例子: “v 1.000000 -1.000000 -1.000000” “f 1 2 3 4”

file = new BufferedReader(new InputStreamReader(am.open("test.obj"))); //Loads the .obj
        String out = " ";
        try{
            while((out=file.readLine()) != null){ //Grabs a line from the file and checks so that it aint null
                int index = 1;
                int nextIndex = 1;
                if(out.startsWith("v")){Log.w("OBJs", out); //If line starts with "v", go ahead
                    while(index != out.lastIndexOf(" ")){ //checks so the index is not the last index of an empty space " "
                        nextIndex = out.indexOf(" ", index +1); //Looks for the next occurance of an empty space from +1 of current empty space
                        vertices.add(Float.valueOf(out.substring(index, nextIndex))); //Grabs the string in between the two spaces
                        index = nextIndex;// 
                        }
                    vertices.add(Float.valueOf(out.substring(index, out.length())));//Grabs the last variable from the file as the above while is now false
                    }

                int index2 = 1;
                int nextIndex2 = 1;
                if(out.startsWith("f")){Log.w("OBJs", out);// THis works exactly as above, gives error and i dunno why
                    while(index2 != out.lastIndexOf(" ")){
                        nextIndex2 = out.indexOf(" ", index2 +1);
                        edges.add(Integer.valueOf(out.substring(index2, nextIndex2)));
                        Log.w("OBJs", out.substring(index2, nextIndex2)); 
                        index2 = nextIndex2;

                    }
                    edges.add(Integer.valueOf(out.substring(index2, out.length())));
                }

            }
        }

这导致:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.stuffs.blodvite/my.stuffs.blodvite.MainActivity}: java.lang.NumberFormatException: Invalid int: " 1"

这只发生在第二个循环 fragment 中,我正在尝试收集面部信息。收集顶点工作完美,我对两者使用完全相同的算法,所以我不明白问题是什么。 还有一点有趣的是,当我上次关闭 eclipse 时,我认为它确实有效,不知道发生了什么,或者我只是记错了。哦,正如您从代码中看到的那样,它将读取的行打印到 Log cat。这就是结果。

01-26 23:42:13.916: W/OBJs(18442): v 1.000000 -1.000000 -1.000000
01-26 23:42:13.916: W/OBJs(18442): v 1.000000 -1.000000 1.000000
01-26 23:42:13.916: W/OBJs(18442): v -1.000000 -1.000000 1.000000
01-26 23:42:13.916: W/OBJs(18442): v -1.000000 -1.000000 -1.000000
01-26 23:42:13.916: W/OBJs(18442): v 1.000000 1.000000 -0.999999
01-26 23:42:13.916: W/OBJs(18442): v 0.999999 1.000000 1.000001
01-26 23:42:13.916: W/OBJs(18442): v -1.000000 1.000000 1.000000
01-26 23:42:13.916: W/OBJs(18442): v -1.000000 1.000000 -1.000000
01-26 23:42:13.916: W/OBJs(18442): f 1 2 3 4

因此它清楚地显示顶点收集工作没有错误,但是面收集在其第一次迭代时停止。

最佳答案

发生这种情况是因为您在“1”中有一个前导空格。正如@Raghav Sood 已经指出的那样,您可以在尝试解析为 int 以使其工作之前调用 trim 字符串。您也可以简单地获取从 index2+1 开始的子字符串(即跳过第一个空格)。

我很好奇为什么您不为此简单地使用 StringTokenizer。

关于java - 数字格式异常 : Invalid int: "1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565558/

相关文章:

php - 固定比例选择

java - 无法处理导航 fragment 中的后退按钮

php - Android 应用程序发送一个字符串以在网页上显示

r - 想知道在这种情况下我是否可以在这里使用 APPLY 而不是使用 FOR LOOP 进行优化?

algorithm - 计算二叉树中叶子数的并行算法

javascript - 使用 jquery ui map (gmap) 获取当前位置

java - 需要将音频 byte[] 编码为要通过 JSON 传输的字符串。将从 C# 编码并发送,并在 Java 中读取为音频字节

java - 获取文件 channel 的位置

java - 在两个节点(圆)之间绘制边(线)

java - 使用带有gradle的proguard创建混淆的应用程序jar时出现重复的zip条目