标签: java.util.scanner

使用扫描仪读取行

为更多读者编辑:问题是我的输入文件已损坏.

我不明白我做错了什么:

我使用的是这段代码:

    File f = new File("C:\\Temp\\dico.txt");
    BufferedReader r = null;
    try {
        r = new BufferedReader(new FileReader(f));
        String scan;
        while((scan=r.readLine())!=null) {
            if(scan.length()==0) {continue;}
            //treatment
        }
    } catch (FileNotFoundException ex) {
        Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        if(r!=null) try {
            r.close();
        } catch (IOException ex) {
            Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.现在,出于某种原因,我想换一台扫描仪.我的代码成了:

    File f = new File("C:\\Temp\\dico.txt");
    Scanner r = null;
    try {
        r = new Scanner(f);
        String scan; …
Run Code Online (Sandbox Code Playgroud)

java readline java.util.scanner

27
推荐指数
2
解决办法
15万
查看次数

Java Scanner类读取字符串

我得到以下代码:

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];

for (int i = 0; i < names.length; i++){
  System.out.print("Type a name: ");
  names[i] = in.nextLine();
}
Run Code Online (Sandbox Code Playgroud)

该代码的输出如下:

How many names are you going to save:3 
Type a name: Type a name: John Doe
Type a name: John Lennon
Run Code Online (Sandbox Code Playgroud)

注意它是如何跳过第一个名字的?它跳过它并直接进入第二个名称输入.我试过看是什么导致了这个,但我似乎无法指出它.我希望有一个人可以帮助我.谢谢

java string duplicates java.util.scanner

26
推荐指数
2
解决办法
15万
查看次数

Java String Scanner输入不等待信息,直接移动到下一个语句.如何等待信息?

我正在编写一个简单的程序,提示用户输入一些学生,然后要求用户输入每个学生的姓名和分数,以确定哪个学生的分数最高.

我编写了程序代码并编译.第一行要求一些学生并等待输入.第二行应该是要求学生姓名并等待输入,然后第三行应该打印ans询问该学生的分数,并等待输入但是在第二行打印后,立即调用第三行(第二行是等不及输入)然后在尝试在第三行之后输入所请求的信息时出现运行时错误.

如何调整代码以便在打印第三行之前打印第二行并等待输入字符串?

import java.util.Scanner;

public class HighestScore {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter the number of students: ");
        int numOfStudents = input.nextInt();

        System.out.print("Enter a student's name: ");
        String student1 = input.nextLine();

        System.out.print("Enter that student's score: ");
        int score1 = input.nextInt();

        for (int i = 0; i <= numOfStudents - 1; i++) {

            System.out.println("Enter a student's name: ");
            String student = input.nextLine();

            System.out.println("Enter that student's score: ");
            int score = input.nextInt();

            if (score …
Run Code Online (Sandbox Code Playgroud)

java string java.util.scanner

26
推荐指数
2
解决办法
7万
查看次数

扫描仪永远不会关闭

我正在开发一款游戏,我的扫描仪遇到了一些问题.我的资源泄漏扫描程序从未关闭过.

但我以为我的扫描仪在没有关闭它之前就已经工作了.但现在不是.有人可以帮帮我吗?

import java.util.Scanner;

public class Main {

    public static final boolean CHEAT = true;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int amountOfPlayers;
        do {
            System.out.print("Select the amount of players (1/2): ");
            while (!scanner.hasNextInt()) {
                System.out.println("That's not a number!");
                scanner.next(); // this is important!
        }

        amountOfPlayers = scanner.nextInt();
        while ((amountOfPlayers <= 0) || (amountOfPlayers > 2));
        System.out.println("You've selected " + amountOfPlayers+" player(s)."); 
    }
}
Run Code Online (Sandbox Code Playgroud)

java resource-leak java.util.scanner

26
推荐指数
2
解决办法
16万
查看次数

Java从单行读取多个int

我正在研究一个程序,我希望允许用户在出现提示时输入多个整数.我曾尝试使用扫描仪,但我发现它只存储用户输入的第一个整数.例如:

输入多个整数:1 3 5

扫描仪只能获得第一个整数1.是否可以从一行获得所有3个不同的整数,并且以后能够使用它们?这些整数是我需要根据用户输入操作的链表中数据的位置.我无法发布我的源代码,但我想知道这是否可行.

java input java.util.scanner

26
推荐指数
7
解决办法
18万
查看次数

如何使用Scanner仅接受有效的int作为输入

我正在尝试使一个小程序更强大,我需要一些帮助.

Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;

System.out.print("Enter number 1: ");
num1 = kb.nextInt();

while(num2 < num1) {
    System.out.print("Enter number 2: ");
    num2 = kb.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
  1. 2号必须大于1号

  2. 此外,我希望程序自动检查并忽略用户是否输入字符而不是数字.因为现在当用户输入例如r而不是数字时,程序就会退出.

java validation java.util.scanner

24
推荐指数
1
解决办法
22万
查看次数

阅读java中的下一个单词

我有一个文本文件,其中包含以下内容:

ac und
accipio annehmen
ad zu
adeo hinzugehen
...
Run Code Online (Sandbox Code Playgroud)

我读了文本文件并遍历这些行:

Scanner sc = new Scanner(new File("translate.txt"));
while(sc.hasNext()){
 String line = sc.nextLine();       
}
Run Code Online (Sandbox Code Playgroud)

每行有两个单词.java中是否有任何方法可以获取下一个单词,还是必须拆分行字符串来获取单词?

java java.util.scanner

23
推荐指数
3
解决办法
14万
查看次数

扫描仪不读取整个句子 - 扫描仪类的next()和nextLine()之间的差异

我正在编写一个程序,允许用户输入他的数据然后输出它.它的3/4是正确的但是当它到达输出地址时它只打印一个字,只能说'Archbishop'来自'Archbishop Street'.我该如何解决?

import java.util.*;

class MyStudentDetails{
    public static void main (String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("Enter Your Name: ");
        String name = s.next();
        System.out.println("Enter Your Age: ");
        int age = s.nextInt();
        System.out.println("Enter Your E-mail: ");
        String email = s.next();
        System.out.println("Enter Your Address: ");
        String address = s.next();

        System.out.println("Name: "+name);
        System.out.println("Age: "+age);
        System.out.println("E-mail: "+email);
        System.out.println("Address: "+address);
    }
}
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

21
推荐指数
7
解决办法
9万
查看次数

BufferedReader和BufferedInputStream之间的区别

之间有什么区别BufferedReader,BufferedInputStreamScanner在Java?BufferedReader读取文本并BufferedInputStream读取byte.除此之外有什么区别吗?

java io bufferedreader java.util.scanner

21
推荐指数
2
解决办法
2万
查看次数

如何使用java.util.Scanner正确读取System.in中的用户输入并对其进行操作?

这是一个可以用作重复目标的规范问题/答案.这些要求基于每天发布的最常见问题,可根据需要添加.它们都需要相同的基本代码结构才能进入每个场景,并且它们通常彼此依赖.


扫描仪看起来像一个"简单"的类,这是第一个错误的地方.它并不简单,它具有各种非明显的副作用和异常行为,以非常微妙的方式打破了最小惊讶原则.

所以这对于这个课程来说似乎有些过分,但洋葱错误和问题的剥离都很简单,但由于它们的相互作用和副作用,它们非常复杂.这就是为什么每天在Stack Overflow上有很多关于它的问题.

常见扫描仪问题:

大多数Scanner问题包括尝试不止一次这些事情.

  1. 我希望能够让我的程序在每次上一次输入后自动等待下一个输入.

  2. 我想知道如何检测退出命令并在输入该命令时结束我的程序.

  3. 我想知道如何以不区分大小写的方式匹配exit命令的多个命令.

  4. 我希望能够匹配正则表达式模式以及内置基元.例如,如何匹配看似日期(2014/10/18)的内容?

  5. 我想知道如何匹配可能不容易用正则表达式匹配实现的东西 - 例如,URL(http://google.com).

动机:

在Java世界中,Scanner是一个特殊情况,它是一个非常挑剔的课程,教师不应该给新学生使用说明.在大多数情况下,教师甚至不知道如何正确使用它.如果在专业的生产规范中使用它几乎没有,所以它对学生的价值是非常值得怀疑的.

使用Scanner意味着这个问题和答案提到的所有其他事情.Scanner关于如何解决这些常见问题并不仅仅是因为它Scanner几乎在所有Scanner出错的问题中始终存在共病问题.它永远不仅仅是关于next()vsnextLine(),这只是该类实现的挑剔的一个症状,在问题询问中的代码发布中总会存在其他问题Scanner.

答案显示了Scanner在StackOverflow上使用和询问的99%的案例的完整,惯用的实现.

特别是在初学者代码中.如果您认为这个答案过于复杂,那么Scanner请先告诉新学生使用的教师,然后再解释其复杂性,怪癖,非明显副作用及其行为的特点.

Scanner关于最小惊讶原则的重要性以及为什么一致的行为和语义在命名方法和方法论证中很重要,这是一个很好的教学时刻.

给学生注意:

您可能永远不会真正看到Scanner在专业/商业业务应用程序中使用,因为它所做的一切都是通过其他方式做得更好.真实世界的软件必须比Scanner允许您编写代码更具弹性和可维护性.真实世界的软件使用标准化的文件格式解析器和文档格式,而不是独立分配中给出的特殊输入格式.

java system.in java.util.scanner

21
推荐指数
1
解决办法
2万
查看次数