Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在读取特定令牌时停止循环而不跳到下一个令牌?_Java_File_While Loop_Java.util.scanner - Fatal编程技术网

Java 如何在读取特定令牌时停止循环而不跳到下一个令牌?

Java 如何在读取特定令牌时停止循环而不跳到下一个令牌?,java,file,while-loop,java.util.scanner,Java,File,While Loop,Java.util.scanner,我正在读取的文件在一行上有一个字符串,后跟一个int,然后继续执行,直到到达以下字符:* 例如: A 1300 B 1200 C 1100 D 1000 * 我需要它停止读取文件,并在文件到达星形后停止循环。当我执行if语句时,它没有读入*,它会像预期的那样跳到下一行,但这会导致与读入的下一个标记的对齐问题 这是我的密码: static GradingScale reportCard = new GradingScale(); public static void main(String[]

我正在读取的文件在一行上有一个
字符串
,后跟一个
int
,然后继续执行,直到到达以下字符:
*

例如:

A 1300
B 1200
C 1100
D 1000
*
我需要它停止读取文件,并在文件到达星形后停止循环。当我执行if语句时,它没有读入
*
,它会像预期的那样跳到下一行,但这会导致与读入的下一个标记的对齐问题

这是我的密码:

static GradingScale reportCard = new GradingScale();
public static void main(String[] args) {
    readInputFile();
    javax.swing.JOptionPane.showMessageDialog(null,reportCard.toString());
}

public static void readInputFile(){
    try{
        Scanner file = new Scanner(new File("grades.txt"));
        int maxPoints = file.nextInt();
        reportCard.setMaxPoints(maxPoints);
        while(!file.hasNext("*")){
                String grade = file.next();
                int points = file.nextInt();
                double percent = points/(maxPoints*1.0);
                reportCard.addGradeLevel(grade, points, percent); 
        }
    }
    catch(java.io.FileNotFoundException fnfe){
        javax.swing.JOptionPane.showMessageDialog(null, "File not found");
    }

}
我尝试使用
hasNext(Pattern)
方法,但一直出现以下错误:

at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.sequence(Pattern.java:2123)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.util.Scanner$1.create(Scanner.java:367)
at java.util.Scanner$1.create(Scanner.java:365)
at sun.misc.LRUCache.forName(LRUCache.java:72)
at java.util.Scanner.hasNext(Scanner.java:1400)
at mp1.MP1.readInputFile(MP1.java:32)
at mp1.MP1.main(MP1.java:23)
我是在用这种方法做错事,还是应该完全做别的事情

我对java非常陌生,所以请尽量简单易懂。
我道歉,如果这是难以阅读;这是我的第一篇文章。

最好使用BufferedReader来阅读这些行。这里有一个关于它的教程


当您到达“*”时,有一个条件来中断循环
hasNext()
的参数是一个正则表达式,
*
是一个无效的正则表达式,因为星号表示前面表达式的“零次或多次”,并且没有前面的表达式

你必须避开星号:
hasNext(\\*”

备选方案:
hasNext(模式。引号(“*”)

有关正则表达式的更多信息,请参阅的javadoc。

接受正则表达式模式

但是您似乎需要搜索文本
*

所以,用它来逃避

Scanner.hasNext("\\*");


谢谢那正是我要找的!
Scanner.hasNext("\\*");
Scanner.hasNext(Pattern.quote("*"));