我有一个元素列表,第一个元素是一个城市名称,第二个信息是关于城市的。我想读取cities.txt文件,并将列表信息放入hashMap中。在文件cities.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])
}
}
}cities.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发布于 2019-10-10 02:19:38
您说在城市后面有一个标签,但在您的示例中,它看起来像是多个空格。因此您可以使用\\s+在第一组空格上拆分。并添加两个限制,这样描述就不会被打断:
var pieces = line.split("\\s+".toRegex(), 2)如果有两个单词组成的城市该怎么办?然后我认为你真的需要在城市名称后面加一个制表符,你可以在制表符上拆分,而不需要正则表达式:
var pieces = line.split('\t')发布于 2019-10-10 01:56:39
在使用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字符串的前面有时会有一些空格,所以你可能想把它们过滤掉。
https://stackoverflow.com/questions/58309353
复制相似问题