проблемы с отображением массива, возможно из-за пробелов - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь импортировать текстовый файл с информацией об автомобиле, разделить строки на массивы и затем отобразить их.Количество дверей сочетается со следующим номерным знаком.Пробовал несколько способов избавиться от пробельных символов, которые, как мне кажется, вызывают проблему, но безуспешно.

пробельные символы Мой код отображает этот результат:

Number Plate : AG53DBO
 Car Type : Mercedes
 Engine Size : 1000
 Colour : (255:0:0)
 No. of Doors : 4
MD17WBW

Number Plate : 4
MD17WBW
 Car Type : Volkswagen
 Engine Size : 2300
 Colour : (0:0:255)
 No. of Doors : 5
ED03HSH

Код:

public class Application {

    public static void main(String[] args) throws IOException {

        ///// ---- Import File ---- /////

        String fileName =
                "C:\\Users\\beng\\eclipse-workspace\\Assignment Trailblazer\\Car Data";

        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;
        String ls = System.getProperty("line.separator");
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append(ls);
            }
        reader.close();

        String content = stringBuilder.toString();

        ///// ---- Split file into array ---- /////
        String[] dataList = content.split(",");

        // Display array
        for (String temp : dataList) {
//          System.out.println(temp);
        }

        ArrayList<Car> carArray = new ArrayList();

        // Loop variables
        int listLength = 1;
        int arrayPosition = 0;
        // (dataList.length/5)
        while (listLength < 5) {
            Car y = new Car(dataList, arrayPosition);
            carArray.add(y);
            listLength++;
            arrayPosition += 4;
        }

        for (Car temp : carArray) {
            System.out.println(temp.displayCar());
        }
    }
}

И

public class Car {

    String[] data;

    private String modelUnpro;
    private String engineSizeUnpro;
    private String registrationUnpro;
    private String colourUnpro;
    private String doorNoUnpro;

    // Constructor
    public Car(String[] data, int arrayPosition) {
        registrationUnpro = data[arrayPosition];
        modelUnpro = data[arrayPosition + 1];
        engineSizeUnpro = data[arrayPosition + 2];
        colourUnpro = data[arrayPosition + 3];
        doorNoUnpro = data[arrayPosition + 4];
    }

    // Getters
    private String getModelUnpro() {
        return modelUnpro;
    }
    private String getEngineSizeUnpro() {
        return engineSizeUnpro;
    }
    private String getRegistrationUnpro() {
        return registrationUnpro;
    }
    private String getColourUnpro() {
        return colourUnpro;
    }
    private String getDoorNoUnpro() {
        return doorNoUnpro;
    }

    public String displayCar() {
        return "Number Plate : " + getRegistrationUnpro() + "\n Car Type : " + getModelUnpro() + "\n Engine Size : "
                + getEngineSizeUnpro() + "\n Colour : " + getColourUnpro() + "\n No. of Doors : " + getDoorNoUnpro() + "\n";
    }

}

Текстовый файл:

AG53DBO,Mercedes,1000,(255:0:0),4
MD17WBW,Volkswagen,2300,(0:0:255),5
ED03HSH,Toyota,2000,(0:0:255),4
OH01AYO,Honda,1300,(0:255:0),3
WE07CND,Nissan,2000,(0:255:0),3
NF02FMC,Mercedes,1200,(0:0:255),5
PM16DNO,Volkswagen,1300,(255:0:0),5
MA53OKB,Honda,1400,(0:0:0),4
VV64BHH,Honda,1600,(0:0:255),5
ER53EVW,Ford,2000,(0:0:255),3

Ответы [ 2 ]

0 голосов
/ 23 января 2019

В StringBuilder вы собираете все строки:

AG53DBO,Mercedes,1000,(255:0:0),4\r\nMD17WBW,Volkswagen,2300,(0:0:255),5\r\n...

Эта строка сначала должна быть разбита на ls - а затем у вас есть строки с полями, разделенными запятой.

Теперь просто разделениезапятая приведет к удвоению элемента массива 4\r\nMD17WBW.

Что-то вроде:

String fileName =
            "C:\\Users\\beng\\eclipse-workspace\\Assignment Trailblazer\\Car Data";
Path path = Paths.get(fileName);
List<String> lines = Files.readAllLines(path); // Without line ending.

List<Car> cars = new ArrayList<>();
for (String line : lines) {
    String[] data = line.split(",");
    Car car = new Car(data);
    cars.add(car);
}

Path, Paths и особенно Files - очень удобные классы.С помощью Java Streams можно также сокращать такие вещи, как:

String fileName =
            "C:\\Users\\beng\\eclipse-workspace\\Assignment Trailblazer\\Car Data";
Path path = Paths.get(fileName);
List<Car> cars = Files.lines(path)     // Stream<String>
    .map(line -> line.split(","))      // Stream<String[]>
    .map(Car::new)                     // Stream<Car>
    .collect(Collectors.toList());     // List<Car>
  1. Здесь .lines возвращает Stream<String> (ходящий курсор) строк в файле без разделителя строк.
  2. Затем .map(l -> l.split(",")) разбивает каждую строку.
  3. Затем вызывается конструктор Car(String[]) для массива строк.
  4. Затем результат собирается в список.
0 голосов
/ 23 января 2019

Удалить разделитель строк из цикла while.

        String fileName = "D:\\Files\\a.txt";
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line.trim());
        }
        reader.close();
        String content = stringBuilder.toString();
        String[] dataList = content.split(",");
        ArrayList<Car> carArray = new ArrayList();
        int listLength = 1;
        int arrayPosition = 0;
        // (dataList.length/5)
        while (listLength < 3) {
            Car y = new Car(dataList, arrayPosition);
            carArray.add(y);
            listLength++;
            arrayPosition += 4;
        }
        for (Car temp : carArray) {
            System.out.println(temp.displayCar());
        }
...