【问题标题】:Input String is not being equated to String from a file输入字符串不等同于文件中的字符串
【发布时间】:2021-01-05 07:33:51
【问题描述】:

我是一个菜鸟,这个程序是关于从文本文件中读取一个名字,我无法通过它。

    Scanner scan = new Scanner(System.in);
    System.out.println("enter file to read");
    String file = scan.nextLine();
    try (Scanner scanner = new Scanner(Paths.get(file))) {
        System.out.println("Enter name to validate, no entry will close");
        while (scanner.hasNextLine()) {
            String name = scan.nextLine();
            String row = scanner.nextLine();
            if (name.equals(row)) {
                System.out.println("Entry Permitted");
            } else if (name.isEmpty()) {
                break;
            } else {
                System.out.println("Entry Denied");
            }
        }
    } catch (Exception e) {
        System.out.println("Error: " + e.getMessage());
    }

这些是文件中的字符串:

Taylor Swift        
Kylie Jenner        
Kanye West      
Lionel Messi        
Ed Sheeran      
Cristiano Ronaldo   
Neymar
The Eagles      
Phil McGraw     
Saul "Canelo" Alvarez

【问题讨论】:

  • 一个建议:scan 和scanner 的名字太接近了。我会调用文件的扫描仪,例如 fileScanner。虽然我会改用 FileReader。
  • 请投票stackoverflow.com/a/63955777/4313726 并确认这是最好的解决方案...非常感谢!

标签: java string file while-loop path


【解决方案1】:

虽然前面的答案可行……但我们可以用现代 Java 功能“流式传输”解决方案。

    public static void main(String[] args) {

    try (Scanner scanner = new Scanner(System.in)) {

        System.out.println("Enter file of names to read ...\r");

        Set<String> names = Files.readAllLines(Paths.get(scanner.nextLine()))
                .stream()
                .map(String::trim)
                .collect(Collectors.toSet());

        System.out.println("Enter a name to validate, or a blank entry to exit ...\r");

        String name;
        while (scanner.hasNextLine()) {
            name = scanner.nextLine().trim();
            if (name.isEmpty()) {
                System.out.println("auf Wiedersehen");
                break;
            }
            System.out.println(String.format("Entry %s", names.contains(name) ? "Permitted" : "Denied"));
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 我认为这是一个很好的答案。有人反对这个答案有什么理由吗?它有效!
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 2017-12-29
  • 2020-07-02
相关资源
最近更新 更多