Прочитайте .txt и поместите информацию в hashMap - PullRequest
1 голос
/ 09 октября 2019

У меня есть список элементов, первый элемент - это название города, а вторая информация о городе. Я хочу прочитать файл towns.txt и поместить информацию списка в hashMap. В файле towns.txt города и элементы отдельно для одной вкладки. Но когда я помещаю части в hashMap, вторые части не сохраняются.

private fun readFile() {
    var cityToDefn = java.util.HashMap<String, String>()
    val cities = ArrayList<String>()
    val reader = Scanner(resources.openRawResource(R.raw.cities))
    while (reader.hasNextLine()) {
        val line = reader.nextLine()
        var pieces = line.split("\\s".toRegex())

        if (pieces.size >= 2) {
            cities.add(pieces[0])
            cityToDefn.put(pieces[0], pieces[1])
        }
    }
}

towns.txt

 lisboa  castelo de são jorge
 porto   torre dos clerigos
 aveiro  ria
 lisboa  terreiro do paço
 porto   avenida dos aliados
 lisboa  marques de pombal
 aveiro  igreja da glória

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Вы говорите, что есть вкладка после городов, но в вашем примере она выглядит как несколько пробелов. Таким образом, вы можете использовать \\s+, чтобы разбить первую группу пробелов. И добавьте ограничение в два, чтобы описание не разбивалось:

var pieces = line.split("\\s+".toRegex(), 2)

Что делать, если есть города с именами из двух слов? Тогда я думаю, что вам действительно нужна вкладка после названия города, и вы можете разделить символ табуляции без регулярного выражения:

var pieces = line.split('\t')
0 голосов
/ 09 октября 2019

Попробуйте использовать классы Kotlin при работе с Kotlin.

Это решит проблему:

private fun readFile() {
    val cityToDefn = mutableMapOf<String,String>()
    val reader = Scanner(resources.openRawResource(R.raw.cities))
    while (reader.hasNextLine()) {
        val line = reader.nextLine()

        val left = msg.substringBefore(' ')
        val right = msg.substringAfter(' ')

        cityToDefn[left] = right
    }
    val cities = cityToDefn.keys
}

Кстати: строка right иногда будет иметь несколько пробелов впереди,так что, возможно, вы захотите отфильтровать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...