1

次の内容のテキスト ファイルがあります。

one
two
three
four

Java のテキスト ファイル内の位置で文字列「three」にアクセスしたいのですが、Google で部分文字列の概念を見つけましたが、使用できません。

これまでのところ、ファイルの内容を読み取ることができます:

import java.io.*;
class FileRead 
{
 public static void main(String args[])
  {
  try{
  // Open the file that is the first 
  // command line parameter
  FileInputStream fstream = new FileInputStream("textfile.txt");
  // Get the object of DataInputStream
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  //Read File Line By Line
  while ((strLine = br.readLine()) != null)   {
  // Print the content on the console
  System.out.println (strLine);
  }
  //Close the input stream
  in.close();
    }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }

}

部分文字列の概念をファイルに適用したいのですが、位置を尋ねて文字列を表示します。

 String Str = new String("Welcome to Tutorialspoint.com");
 System.out.println(Str.substring(10, 15) );
4

3 に答える 3

2

関心のあるファイル内のバイトオフセットがわかっている場合は、簡単です。

RandomAccessFile raFile = new RandomAccessFile("textfile.txt", "r");
raFile.seek(startOffset);
byte[] bytes = new byte[length];
raFile.readFully(bytes);
raFile.close();
String str = new String(bytes, "Windows-1252"); // or whatever encoding

しかし、これを機能させるには、文字オフセットではなく、バイト オフセットを使用する必要があります。ファイルが UTF-8 などの可変幅エンコーディングでエンコードされている場合、n 番目の文字を直接シークする方法はありません。ファイルの先頭に移動し、最初の n-1 文字を読み取って破棄します。

于 2013-01-04T12:09:53.363 に答える
0

あなたはこれを探しているようです。そこに投稿したコードはバイト レベルで動作するため、動作しない場合があります。別のオプションは、BufferedReader を使用して、次のようにループ内で 1 文字だけを読み取ることです。

String getString(String fileName, int start, int end) throws IOException {
    int len = end - start;
    if (len <= 0) {
        throw new IllegalArgumentException("Length of string to output is zero or negative.");
    }

    char[] buffer = new char[len];
    BufferedReader reader = new BufferedReader(new FileReader(fileName));
    for (int i = 0; i < start; i++) {
        reader.read(); // Ignore the result
    }

    reader.read(buffer, 0, len);
    return new String(buffer);
}
于 2013-01-04T12:14:50.607 に答える