尝试在对象类中创建一个将文本文件划分为部分的函数 (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();
}
}

当我尝试从主类运行函数时,它正在写入此错误:

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));
    }

最新更新