Найти строку внутри текстового файла.

Найти строку внутри текстового файла. Затем получите следующую строку и разделите на indexOf() и substring() .

import java.util.*; 
import java.io.*;

public class FileReadTest {

    public static void main(String[] args) throws IOException {
        File f = new File("a.dat");
        Scanner fin = new Scanner(f);
        String airportcode = "HOI";

        while (fin.hasNextLine()) {
            String line = fin.nextLine();
            int firstindex = line.indexOf(airportcode);

            if (firstindex > 0) {
                int Code = line.indexOf("|");
                int Country = line.lastIndexOf("|",Code);
                int State = line.indexOf("|", Country);
                int City = line.indexOf("|", State);
                int Airport = line.indexOf("|", City);
                System.out.println(Code);
                System.out.println(Country);
                System.out.println(State);
                System.out.println(City);
                System.out.println(Airport);
                System.out.println(line.substring(0, Code));
                break;
            }
        }

        fin.close();
    }
}

1-й выход выглядит следующим образом: French Polynesia|HOI|Hao|Tuamotos|Hao Airport Мне нужно использовать только indexOf() и substring() , но мне нужно вот так:

French Polynesia
HOI
Hao
Tuamotos
Hao Airport

Что я должен делать?

Всего 2 ответа


Исходя из предположения у вас всегда одинаковое количество полей, в вашем случае 5 разделенных символом | Вы можете решить эту проблему, не используя метод String split а просто indexOf и substring как indexOf ниже:

String s = "French Polynesia|HOI|Hao|Tuamotos|Hao Airport";
for (int i = 0; i < 4; ++i) {
    int endIndex = s.indexOf("|");
    System.out.println(s.substring(0, endIndex));
    s = s.substring(endIndex + 1);
}
System.out.println(s);

Код напечатает все поля, которые могут быть назначены вашим отдельным переменным.


При условии, что:

  • содержимое файла имеет строчки со следующей структурой: French Polynesia|HOI|Hao|Tuamotos|Hao Airport
  • вам нужно печатать только те строки, которые содержат строку "HOI"
  • Вы должны использовать только indexOf и substring .

Вот фрагмент кода, который должен работать для вас (файл a.dat находится в папке resources ):

package example;

import java.util.*; // for Scanner
import java.io.*; // for File and IOException

public class FileReadTest {

    public static void main(String[] args) throws IOException {
        File f = new File(
            Objects.requireNonNull(FileReadTest.class.getClassLoader().getResource("a.dat")).getFile()
        );
        Scanner fin = new Scanner(f);
        String airportcode = "HOI";
        while (fin.hasNextLine()) {
            String line = fin.nextLine();
            if (line.indexOf(airportcode) != -1) {
                int firstindex;
                while ((firstindex = line.indexOf("|")) != -1) {
                    System.out.println(line.substring(0, firstindex));
                    line = line.substring(firstindex + 1);
                }
            }
        }
    }
}

Есть идеи?

10000