我试图将文本文件分成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();
}
}
功能名称为 setperek 。当我试图从主类运行该函数时,它正在编写此错误:
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)
答案 0 :(得分:1)
你必须用单个字符串读取整个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("\\$");
答案 1 :(得分:0)
将你的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);
}
}
您的代码中不需要扫描类,您已经有BufferedReader来读取文件。两者都是多余的。
toString()方法覆盖
在您的课程中添加类似以下方法的内容。
@Override
public String toString() {
return String.format(EpisodeID + " & " + Arrays.toString(Perek));
}
答案 2 :(得分:0)
问题是由ab = scanner.nextLine().split("$"); pirkoni[i] = new TehilimEpisode(i, ab);
造成的。想象一下,没有下一行。它将尝试使用ab = null
创建TehilimEpisode对象。要解决此问题,您应该检查下一行是否有for(int i=1; i<=150 && scanner.hasNextLine() ;i++)
。选择作为答案,如果它工作! :d