有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从字符串获取信息时我没有看到什么[]

我试图先使用“\n”作为分隔符将我的信息拆分为字符串[],然后再将其拆分为字符串[],但这次使用“作为分隔符。 然而,我无法从第二次分裂中获得信息

    public static void initHashMap(){
    String[] lijnen = readDefinitioncsv(definitioncsv).split("\n");
    for (int i =2;i<lijnen.length;i++){
        String[] detaillijn = lijnen[i].split(";");



        // on the line below I get 
        //java.lang.ArrayIndexOutOfBoundsException: 1

        int rood = Integer.parseInt(detaillijn[1]);
        int groen = Integer.parseInt(detaillijn[2]);
        int blauw = Integer.parseInt(detaillijn[3]);
        String provincieNaam = detaillijn[4];
        RGBProvince.put(new Color(rood,groen,blauw), provincieNaam);
    }
}

谢谢你抽出时间


共 (3) 个答案

  1. # 1 楼答案

    为什么for循环在第三个位置初始化

    for (int i =2;i<lijnen.length;i++){
    

    大概你想要i=0

    此外,阵列可能没有2个元素:

    int rood = Integer.parseInt(detaillijn[1]);
    

    这是第二个位置。但由于上面的循环,它可能什么都没有

    在直接跳到数组中的一行/列之前,您可能应该检查至少有这么多行/列

  2. # 2 楼答案

    String[] lijnen = readDefinitioncsv(definitioncsv).split("\r?\n");
    for (int i =2;i<lijnen.length;i++){
        String[] detaillijn = lijnen[i].split("[,;\t]");
        if (detaillijn.length < 5) {
            throw new IllegalArgumentException("Weiniger als 5 elementen: "
                    + lijnen[i]);
        }
    

    这将处理Windows行结尾(\r\n又称CR+LF)以及其他形式的CSV,因为;似乎不起作用

    文件可能以空行结尾,在这种情况下,您需要使用continue跳过该行

    对于良好的顺序,指数从0开始;您似乎跳过了两行标题和第一列

  3. # 3 楼答案

    您正在for循环中将i初始化为2。如果array的项少于三项,则尝试访问一个不存在的位置时,会得到一个超出范围的索引

    为什么不从int i = 0开始呢