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())
时,您正在从扫描仪中提取一个额外的元素。看看我的答案。