尝试在将文本文件分成部分的对象类中创建函数(Java)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试在将文本文件分成部分的对象类中创建函数(Java)相关的知识,希望对你有一定的参考价值。
我试图将文本文件分成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)
你必须用单个字符串读取整个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()
将regex作为参数,$是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);
}
}
您的代码中不需要扫描类,您已经有BufferedReader来读取文件。两者都是多余的。
toString()方法覆盖
在您的课程中添加类似下面的方法。
@Override
public String toString() {
return String.format(EpisodeID + " & " + Arrays.toString(Perek));
}
以上是关于尝试在将文本文件分成部分的对象类中创建函数(Java)的主要内容,如果未能解决你的问题,请参考以下文章