Найти строку внутри текстового файла. Затем получим следующую строку и нужно разделить на индекс и подстроку - PullRequest
0 голосов
/ 25 марта 2020

Найти строку внутри текстового файла. Затем возьмите следующую строку и разделите ее на 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 ]

1 голос
/ 25 марта 2020

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

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

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

1 голос
/ 25 марта 2020

Предполагая, что:

  • содержимое файла имеет строки со следующей структурой: 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);
                }
                System.out.println(line); // last data 
            }
        }
    }
}
...