有 Java 编程相关的问题?

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

java在读取文件时出现忽略大小写问题

因此,我在java中遇到了一个equalsIgnoreCase()问题,它被赋予两个应该完全相同的字符串,但没有返回我预期的结果

我将从这里的代码开始:

   public void readBunnyFile(String fileIn) throws FileNotFoundException { 
      Scanner fileScanner = new Scanner(new File(fileIn));
      listName = fileScanner.nextLine().trim();
      while (fileScanner.hasNext()) {
         String type = fileScanner.next().trim() + " " + fileScanner.next().trim();
         if (type.equalsIgnoreCase("pet bunny")) {
            Scanner lineScanner = new Scanner(fileScanner.nextLine());
            lineScanner.useDelimiter(",");
            String name = lineScanner.next().trim();
            String breed = lineScanner.next().trim();
            double weight = Double.parseDouble(lineScanner.next());
            PetBunny pB = new PetBunny(name, breed, weight);
            addBunny(pB);
         }
         if (type.equalsIgnoreCase("house bunny")) {
            Scanner lineScanner = new Scanner(fileScanner.nextLine());
            lineScanner.useDelimiter(",");
            String name = lineScanner.next().trim();
            String breed = lineScanner.next().trim();
            double weight = Double.parseDouble(lineScanner.next());
            double wearAndTear = Double.parseDouble(lineScanner.next());
            HouseBunny hB = new HouseBunny(name, breed, weight, wearAndTear); 
            addBunny(hB);
         }
         if (type.equalsIgnoreCase("jumping bunny")) {
            Scanner lineScanner = new Scanner(fileScanner.nextLine());
            lineScanner.useDelimiter(",");
            String name = lineScanner.next().trim();
            String breed = lineScanner.next().trim();
            double weight = Double.parseDouble(lineScanner.next());
            double trainingCost = Double.parseDouble(lineScanner.next());
            JumpingBunny jB = new JumpingBunny(name, breed, weight, trainingCost); 
            addBunny(jB);
         }
         if (type.equalsIgnoreCase("show bunny")) {
            Scanner lineScanner = new Scanner(fileScanner.nextLine());
            lineScanner.useDelimiter(",");
            String name = lineScanner.next().trim();
            String breed = lineScanner.next().trim();
            double weight = Double.parseDouble(lineScanner.next());
            double groomingCost = Double.parseDouble(lineScanner.next());
            ShowBunny sB = new ShowBunny(name, breed, weight, groomingCost);
            addBunny(sB);
         }
         else {
            Scanner lineScanner = new Scanner(fileScanner.nextLine());
            lineScanner.useDelimiter(",");
            addExcludedRecord(type + lineScanner.nextLine());
         }       
      }

正在读取的文件如下所示:

Bunny Collection
Pet bunny, Floppy, Holland Lop, 3.5
house Bunny, Spot, Really Mixed, 5.8, 0.15
mouse Bunny, Spots, Mixed, 0.8, 0.15
Jumping Bunny, Speedy, English, 6.3, 25.0 
fighting bunny, Slugger, Big Mixed, 16.5, 21.0
Show bunny, Bigun, Flemish Giant, 14.6, 22.0

我已经看到我的调试器在类型值为“Pet bunny”的情况下运行了无数次,但它从未进入if语句,只进入else语句。我在逻辑上有什么地方做错了吗?“宠物兔子”应该等于“宠物兔子”,因为我正在使用。等信号,对吗


共 (1) 个答案

  1. # 1 楼答案

    这里的问题是,您对Scanner#next()的第二次调用将拾取所有内容,包括bunny后面的逗号。因此,我建议您将pet bunnypet bunny,进行比较

    鉴于您已经拥有CSV数据,一种更安全(更简单)的方法是只使用Scanner#nextLine()并读取整行数据。然后,用逗号分隔:

    String line = fileScanner.nextLine();
    String[] parts = line.split(",\\s+");
    if (parts[0].equalsIgnoreCase("pet bunny")) {
        String name = parts[1];
        String breed = parts[2];
        double weight = Double.parseDouble(parts[3]);
        PetBunny pB = new PetBunny(name, breed, weight);
        addBunny(pB);
    }
    // and other cases