当前位置: 首页 > 知识库问答 >
问题:

扫描字符串时如何使用Scanner方法?

欧阳鸿德
2023-03-14

我有一个文本文件,其中包含几行由空格分隔的小整数列表。我要扫描第一行,并为第一行中的每个整数做一些事情。

    String lineString = textScan.nextLine(); //scans the first line of the text file.
    Scanner Line = new Scanner(lineString); //scans the String retrieved from the text file.

    while (Line.hasNextInt())
    { //do stuff 
    }

所以我有一个扫描仪(textScan),它扫描文本文件的第一行,然后将其保存为String。然后我有了第二个扫描器,它扫描String来检查其中的值是否是整数。

但是 while 语句不允许我使用“行.has下一个Int”来扫描字符串!那么,我如何浏览字符串行以确定它是否有整数?

编辑:对不起,我的措辞错误。循环将无限运行,因此我尝试在循环之前创建一个打印语句:系统.out.println(行);,它打印出此错误:

java实用程序。扫描仪[delimiters=\p{javaWhitespace}][position=0][match valid=false][need input=false][source closed=false\][skipped=false][group separator=\,][decimal separator=.][positive prefix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q∞\E]

奇怪的是它编译得很好?

输入文件:

5 4 4 3 5 
4 2 2 5 3 
5 2 5 2 3 
5 4 3 2 3 
5 4 2 2 5 
4 4 2 4 2 
3 3 5 3 5 
5 2 4 5 2 
4 4 5 4 2 
2 4 3 5 2 
3 3 3 5 3 
2 4 5 3 4 
3 5 5 4 3 
3 4 2 2 4 
5 5 5 4 4 
3 4 4 4 5 
3 2 4 2 4 
5 4 4 2 4 
5 3 5 2 3 

共有3个答案

朱自明
2023-03-14

很抱歉,您之前误解了您的问题,如果在同一行中有多个整数,您可以使用分隔符将其分割,但仍使用单个扫描仪:

String yourFilename = "filename.txt";

File file = new File(yourFilename).useDelimiter(" ");
Scanner sn = new Scanner(file);

while(sn.hasNextInt()){
// Do your work here
}
隗驰
2023-03-14

您没有必要使用扫描仪来解决这个问题。

public static void main(String[] args) {

    String myString = "This is not int";
    String myInt = "123456";
    int copyOfInt = 0;
    try {
        copyOfInt = Integer.parseInt(myInt);
        System.out.println(copyOfInt);
        copyOfInt = Integer.parseInt(myString);
        System.out.println(myString);
    } catch (Exception e) {
        System.out.println("Not int");
    }
    // Put this in a loop and you can keep doing stuff
}

或者可以用FileInputStream,我觉得比较好。这里有一个例子:

    try (FileInputStream readFile = new FileInputStream(refFile);
            InputStreamReader readIn = new InputStreamReader(readFile, "UTF8")) {
        BufferedReader ReadBuffer = new BufferedReader(readIn);
        String line = "";
        while ((line = ReadBuffer.readLine()) != null) {
            // Search my string of interest 
            if (line.equals("Potential/V, Current/A")) {
                while ((line = ReadBuffer.readLine()) != null) {
                    // Get data after string of interest 
                    // Use createDataType_1_Object() to get my data
                    myDataArray.add(createDataType_1_Object(line));
                }
            }
        }
    } catch (Exception e) {
        System.out.println(e);
    }
云德辉
2023-03-14

我明白问题所在。您需要使用Line。nextInt()在循环内移动光标。

如果没有,Line总是指向开始,循环永远不会结束。

要正确使用它,请调用nextInt(),以便它拾取下一个标记:

while (Line.hasNextInt())
{ 
     System.out.println(Line.nextInt());
}

无限循环:

while (Line.hasNextInt())
{ 
     System.out.println("Infinity");
}
 类似资料:
  • 我试图为字符串创建一个扫描器方法,它只在用户输入的值不为空时才返回该值(空白,用户立即点击“Enter”等)。如果用户这样做,我希望打印出一条错误消息,并让循环再次返回开始,等待新的用户输入。如果正确,我希望方法返回正确的输入值。 我的代码是这样的:

  • 我正试图用Java中的扫描器将一个字符串分成另外两个字符串。好像不起作用。我只能通过谷歌找到扫描仪用来读取控制台输入的例子。我从扫描仪的手册中找出了我做事情的方式,我不确定我错了什么。 第一个和第二个是空白的,我不知道为什么。

  • 我目前正在执行游戏风险。在我的Board课程中,我阅读了三个不同的文本文件,其中包括国家、大陆及其邻近地区。当我构建一个新大陆时,它的构造器需要以下内容(字符串名、int-bonusArmies、ArrayList-memberCountries)。现在,我用扫描器从一个文本文件中读取,这个文件是这样组织的,它的名字,它拥有的奖金军队,每行的其余部分是它的成员国。 北美、5、阿拉斯加、阿尔伯塔省、

  • 问题:编写一个名为wordWrap的方法,该方法接受表示输入文件的扫描器作为其参数,并将文件的每一行输出到控制台,对超过60个字符的所有行进行文字包装。例如,如果一行包含112个字符,则方法应将其替换为两行:一行包含前60个字符,另一行包含最后52个字符。包含217个字符的行应该被包装成四行:三行的长度为60,最后一行的长度为37。 我的代码: 输出中的问题: 预期产出: 生产产量: 我哪里做错了

  • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

  • 我有一个字符串,我想检查它是否包含某些特定字符。如果包含此字符,则必须出现错误消息。 我有一个想法,并计划使用类“模式”和“匹配器”: 现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数“source ceToScan”。正则表达式必须被过滤符号,如等等… 如何在示例中实现此解决方案?