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

时间:2016-03-09 05:32:19

标签: java

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

    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)扫描文本文件的第一行,然后将其保存为字符串。然后我有第二个扫描器扫描字符串以检查其中的值是否为整数。

但是while语句不允许我使用“Line.hasNextInt”来扫描字符串!那么如何扫描String行以确定它是否有整数?

修改 对不起,我的措辞错误。循环将无限运行,所以我尝试在循环之前创建一个print语句: System.out.println(Line); ,它打印出这个错误:

  

java.util.Scanner中[定界符= \ p {javaWhitespace} +] [位置= 0] [匹配   valid = false] [need input = false] [来源   closed = false] [skipped = false] [group separator = \,] [decim al   separator =。] [positive prefix =] [negative prefix = \ Q- \ E] [positive   suffix =] [nega tive 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 

4 个答案:

答案 0 :(得分:1)

我看到了这个问题。 您需要在循环内使用Line.nextInt()来移动光标。

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

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

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

无限循环:

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

答案 1 :(得分:0)

您无需使用扫描仪解决该问题。

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);
    }

答案 2 :(得分:-1)

抱歉,如果您在同一行中有多个整数,您可以使用分隔符拆分它们并仍然使用单个扫描程序,则很早就会误解您的问题:

String yourFilename = "filename.txt";

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

while(sn.hasNextInt()){
// Do your work here
}

答案 3 :(得分:-1)

在while循环中,你需要放置布尔表达式:

while(Boolean_expression)
{
   //Statements
}

您不能将String作为参数输入Scanner类。 扫描仪课程需要InputStream source - >感谢您的评论,我的错误。