我试图将一个文本文件分成 150 个部分,所以我在对象类本身中创建了一个函数。这是完整的对象类:
public TehilimEpisode(int EpisodeID, String[] ab)
{
this.EpisodeID=EpisodeID;
this.Perek=ab;
}
public static void setperek(TehilimEpisode[] pirkoni) throws IOException
{
BufferedReader inputReader = new BufferedReader(new FileReader("C:\\*.txt"));
String nextLine; String[] ab;
while ((nextLine = inputReader.readLine()) != null)
{
for(int i=1; i<=150;i++)
{
ab = nextLine.split("$");
pirkoni[i] = new TehilimEpisode(i, ab);
}
}
for(int i=1; i<=150; i++)
pirkoni.toString();
}
@Override
public String toString() {
return String.format(EpisodeID + " & " + Arrays.toString(Perek));
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return super.equals(obj);
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
}
当我尝试从主类运行函数时,它正在写入此错误:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at TehilimEpisode.setperek(TehilimEpisode.java:25)
at main.main(main.java:48)
您必须在单个字符串中读取整个 txt,然后将其拆分为"$"。下面是我使用分隔符\z
的示例,该分隔符在单个字符串中读取整个文件,然后按"$"拆分字符串。在下面的示例中,我们单行阅读整本书,然后按照您在剧集末尾在书中添加的"$"将其拆分为剧集。
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class FileReadingWithScanner {
public static void main(String[] args) throws IOException {
File file = new File("D:\book.txt");
String book = "";
Scanner sc = new Scanner(file);
/* Using this delimiter you will be able to read whole file in single line. */
sc.useDelimiter("\Z");
book = sc.next();
String[] episodeArr = book.split("$");
//Do whatever you want.
}
}
更新
String.split()
接受正则表达式作为参数,$是Java正则表达式API中的元字符。因此,您需要对其进行转义:使用此book.split("\$");
问题在这里引起:ab = scanner.nextLine().split("$"); pirkoni[i] = new TehilimEpisode(i, ab);
.想象一下没有下一行。它将尝试使用 ab = null
创建 TehilimEpisode 对象。要解决此问题,您应该检查是否有下一行:for(int i=1; i<=150 && scanner.hasNextLine() ;i++)
。如果它有效,请选择作为答案!:D
将你的 for 循环更改为下面,在这里我将 scanner.nextLine(( 方法更改为 nextLine String。
while ((nextLine = inputReader.readLine()) != null)
{
for(int i=1; i<=150;i++)
{
ab = nextLine.split("$");
pirkoni[i] = new TehilimEpisode(i, ab);
}
}
代码中不需要 scanner 类,您已经有 BufferedReader 来读取文件。两者兼而有之是多余的。
toString(( 方法覆盖
将类似下面的方法添加到您的类中。
@Override
public String toString() {
return String.format(EpisodeID + " & " + Arrays.toString(Perek));
}