首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取.txt并将信息放入hashMap

读取.txt并将信息放入hashMap
EN

Stack Overflow用户
提问于 2019-10-10 01:28:36
回答 2查看 35关注 0票数 1

我有一个元素列表,第一个元素是一个城市名称,第二个信息是关于城市的。我想读取cities.txt文件,并将列表信息放入hashMap中。在文件cities.txt中,城市和元素在一个选项卡中是分开的。但是当我把这些片段放到hashMap中时,第二个片段并没有被保存。

代码语言:javascript
复制
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])
        }
    }
}

cities.txt

代码语言:javascript
复制
 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-10 02:19:38

您说在城市后面有一个标签,但在您的示例中,它看起来像是多个空格。因此您可以使用\\s+在第一组空格上拆分。并添加两个限制,这样描述就不会被打断:

代码语言:javascript
复制
var pieces = line.split("\\s+".toRegex(), 2)

如果有两个单词组成的城市该怎么办?然后我认为你真的需要在城市名称后面加一个制表符,你可以在制表符上拆分,而不需要正则表达式:

代码语言:javascript
复制
var pieces = line.split('\t')
票数 1
EN

Stack Overflow用户

发布于 2019-10-10 01:56:39

在使用Kotlin进行操作时,请尝试使用Kotlin的类。

这就解决了这个问题:

代码语言:javascript
复制
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字符串的前面有时会有一些空格,所以你可能想把它们过滤掉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58309353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档