尝试在将文本文件分成部分的对象类中创建函数(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)的主要内容,如果未能解决你的问题,请参考以下文章

c++ 和 OpenGl:如何从类中创建网格对象实例

在 C 中创建单链表

在类中创建对象

如何在 AMP 中创建类似 Bootstrap 的可折叠文件?

通过其他类构造函数在主方法中创建对象时访问对象属性

在c++中创建了类,但在创建新对象时,编译显示:不存在默认构造函数