Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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_Filereader - Fatal编程技术网

Java 使用管道字符作为分隔符,但获取无效的转义序列错误?

Java 使用管道字符作为分隔符,但获取无效的转义序列错误?,java,filereader,Java,Filereader,我不确定为什么使用“\\\”会出现“无效转义序列”错误,因为它应该使它只是一个字符?我试图读取一个文件,其中的值由|字符分隔,出于某种原因,它给了我一个非常奇怪的输出。我有一个文本文件: Star Trek|Sci-fi|Sy-fy|48|is Word Girl|Children's|PBS Kids|21|is Firefly|Sci-fi|FOX|50|is America's Next Top Model|Drama|CNN|51|is not Being Human|Sci-fi|Sy

我不确定为什么使用“\\\”会出现“无效转义序列”错误,因为它应该使它只是一个字符?我试图读取一个文件,其中的值由|字符分隔,出于某种原因,它给了我一个非常奇怪的输出。我有一个文本文件:

Star Trek|Sci-fi|Sy-fy|48|is
Word Girl|Children's|PBS Kids|21|is
Firefly|Sci-fi|FOX|50|is
America's Next Top Model|Drama|CNN|51|is not
Being Human|Sci-fi|Sy-fy|48|is not
Black Mirror|Anthology|Channel 4|55|is
Grandma's House|Comedy|BBC Two|26|is
Sherlock|Crime drama|BBC One|55|is
Psych|Comedy-Drama|ION|51|is not
The Big Bang Theory|Sitcom|CBS|23|is not
我想一行一行地浏览这个文本文件,然后通过一个TV shows类传递它,如下所示:

public class TVShows {

    private String showName;
    private String genre;
    private String network; 
    private String favourite;
    private String runningTime;

    public TVShows(String showName, String genre, String network, String favourite, String runningTime){
        this.genre = genre;
        this.showName = showName;
        this.network = network;
        this.runningTime = runningTime;
        this.favourite = favourite;
    }

    public String toString(){
        return showName + ", on " + network + ", a " + genre + " show with a running time of " + runningTime + " minutes. This " 
                + favourite + " a favourite.";
    }


}
这一切都很简单,但出于某种原因,当我在驱动程序中实现它时,如下所示:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Driver {


    public static void main(String[] args) throws FileNotFoundException {

        File myFile = new File("./src/TVShows.txt");

        Scanner fileScanner = new Scanner(myFile);

        while(fileScanner.hasNextLine())
        {
            TVShows myShows = new TVShows("test","test","test","test","test");
            String line = fileScanner.nextLine();
            System.out.println(fileScanner.nextLine());
            Scanner lineScanner = new Scanner(line);
            lineScanner.useDelimiter("\|");
            while(lineScanner.hasNext())
            {
                System.out.println(lineScanner.next());
                String showName = lineScanner.next();
                String genre = lineScanner.next();
                String network = lineScanner.next();
                String runningTime = lineScanner.next();
                String favourite = lineScanner.next();
                TVShows myShows1 = new TVShows(showName, genre, network, favourite, runningTime);


                System.out.println(myShows1);




            }

        }
    }
}
我在“\ \”上得到一个无效的转义序列错误。为什么会这样?我需要再加一个反斜杠吗?像“\\\”?当我这样做并运行程序时,我得到了输出:

ÿþS t a r  T r e k
Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at Program3.Driver.main(Driver.java:30)
这是第30行:

String favourite = lineScanner.next();

谢谢您的帮助。

您应该在java中使用两个反斜杠

lineScanner.useDelimiter("\\|");

您需要两个反斜杠:

lineScanner.useDelimiter("\\|");
第一个是从编译器中解析第二个。它们一起在字符串常量中形成一个反斜杠,用于转义正则表达式引擎中的管道符号。

这段代码

while(lineScanner.hasNext())
        {
            System.out.println(lineScanner.next());
            String showName = lineScanner.next();
            String genre = lineScanner.next();
            String network = lineScanner.next();
            String runningTime = lineScanner.next();
            String favourite = lineScanner.next();
        }

包括检查
hasNext()
一次,然后运行
next()
六次。因此,如果有许多元素不能被6整除,那么不可避免地会有一些
nYes,我用两个反斜杠来运行它-出于某种原因,它不会出现在“我是否需要再加一个反斜杠?比如“\\\\”?”中,但我的意思是像“\\\\”,当我这样运行它时,这给了我上面概述的错误。非常感谢。你知道为什么我在运行两个反斜杠后仍然会出错吗?@Sarah,我不完全确定,因为我现在在移动设备上,无法运行你的代码。调用next()时可能会出现无法获取更多元素的问题。@Sarah,我也在移动设备上,但@hexafraction有权。您将
nextLine()
next()
用于这两个输出中。@Sarah您的问题是,当您调用
println(next())
时,您正在从扫描仪中提取一个额外的元素。看看我的答案。