Найти целые числа и строки для каждой строки и поместить их в массив?

for (i in markersArray) {
  markersArray[i].setMap(null);
}

работает только с IE.


for (var i=0; i<markersArray.length; i++) {
  markersArray[i].setMap(null);
}

работает на chrome, firefox, ie ...

1
задан Axwell Smith 17 January 2019 в 16:40
поделиться

4 ответа

Я предлагаю вам создать новый класс, например, где хранить номер и имя:

class NumberName {
    Integer number;
    String name;

    // constructor, setter, getter
}

Затем при чтении из файла вы помещаете их в список:

[111 ]

Тогда сортировка становится легкой:

list.sort(Comparator.comparingInt(NumberName::getNumber)); // by number
list.sort(Comparator.comparing(NumberName::getName)); // by name
list.sort(Comparator.comparing(NumberName::getNumber).thenComparing(NumberName::getName)); // by number then by name
0
ответ дан Schidu Luca 17 January 2019 в 16:40
поделиться

Вы можете изменить свою логику следующим образом:

String currLine;
while ((currLine = r.readLine()) != null) {
    if (currLine.trim().length() > 0) {
        String[] split = currLine.split(";");
        itemArr.add(Integer.parseInt(split[0]));
        descArr.add(split[1]);
    }
}

Здесь мы разбиваем каждую строку ( currLine ) на основе ; и сохраняем ее в массив split. Теперь индекс 0th будет содержать число, а индекс 1st будет содержать строку.

Чтобы добавить его в itemArr, вам нужно проанализировать его в int. Также обратите внимание, что если строка пуста, она пропускается. Сортировать это тоже довольно просто.

0
ответ дан Nicholas K 17 January 2019 в 16:40
поделиться

Вы можете использовать функцию разделения и разделить ее, используя «;» как файл .dat имеет; между почтовым индексом и строкой. Если вы хотите, чтобы почтовый индекс был целым числом, вы можете проанализировать части [0], как показано ниже, чтобы дать вам идею /

 FileReader file = new FileReader("C:\\Users\\me\\Desktop\\places.dat");
 BufferedReader r = new BufferedReader(file);

  String st;
  while ((st = br.readLine()) != null) {
   String[] parts = st.split[";"] 
   parts[0] // will have zipcode
   parts[1] // will have other part
  }
0
ответ дан Shivaraj 17 January 2019 в 16:40
поделиться

Использование двух списков излишне. Если вы знаете, что каждый почтовый индекс связан с каждой страной, вы должны создать объекты для их хранения, затем поместить эти объекты в список.

public class MyLocation {
    private int zipcode;
    private String country;
    public MyLocation(int zipcode, String country) {
        this.zipcode = zipcode;
        this.country = country;
    }
    public int getZipcode() {
        return zipcode;
    }
    public String getCountry() {
        return country;
    }
}

Кроме того, у вас есть набор данных с разделителями, поэтому вы должны воспользоваться этим! Используйте String.split() и разделите эту точку с запятой, чтобы получить массив с обоими элементами, готовыми к извлечению.

ArrayList<MyLocation> locations = new ArrayList<>();
try {
    FileReader file = new FileReader("C:\\Users\\me\\Desktop\\places.dat");
    Bufferedreader r = new BufferedReader(file);
    try {
        String line;
        String[] lineValues;

        while ((line = r.readLine()) != null) {
            lineValues = line.split(";");
            MyLocation location = new MyLocation(Integer.valueOf(lineValues[0]), lineValues[1]);
            locations.add(location);
        } 
    } finally {
        r.close();
    }
} catch (IOException e) {
    e.printStackTrace();
}

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

Как уже упоминали другие, если вы хотите сортировать, вам нужно также реализовать Comparable, но это довольно просто.

0
ответ дан Stalemate Of Tuning 17 January 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: