Kotlin:字符串到键值的数组

时间:2018-12-12 11:28:54

标签: arrays string kotlin hashmap

我正在尝试创建一个键=>值Hashmap。

首先,我有一个由 <br /> 分隔的字符串。然后,我用 split()对其进行分割(以独立获取每个字符串)。

然后,我需要用“ =” 拆分每个结果。第一部分是键(我需要它是一个字符串),第二部分是值(一个int)

现在我有

val formules = objInput.getString(Constants.formules)
val hashmap = HashMap<String, Int>()
val resSplit = formules.split("<br />")
    resSplit.forEach {
      val splitFormule = it.split(" = ")
      val key = splitFormule.elementAt(0)
      val value = splitFormule.elementAt(1)
      Log.i(TAG, "$key")
}

尝试显示值时出现此错误:

  

索引:1,大小:1

2 个答案:

答案 0 :(得分:1)

您已经说过,您忘记了检查字符串是否甚至包含gremlin> g.V(10).fold().coalesce(unfold(),store('error').by(constant('x'))).cap('error') ==>[x] 的条件。

一些注意事项:您也可以将elementAt替换为getindexing operator(例如=)。

您可能还对destructuring感兴趣,例如您的拆分也可以编写如下:

splitFormule[0]

最后一个变种,如果没有任何关联的键,则跳过键:

val (key, value) = it.split(" = ") // no need to extract the values from the array, if you know how the splitted data looks like
// you may even want to use the following if there could potentially be more than 1 '=' in the value part
val (key, value) = it.split(" = ", limit = 2) // at most 2 parts

答案 1 :(得分:1)

请注意输入是否正确。空格是相关的。 <br />不同  <br/>=中的数据与<space>=<space>不同。假设您的输入看起来像这样:

foo = 3<br />bar = 5<br />baz = 9000

然后,您可以使用以下简单表达式创建地图:

val map = formules
    .splitToSequence ("<br />") // returns sequence of strings: [foo = 3, bar = 5, baz = 9000]
    .map { it.split(" = ") } // returns list of lists: [[foo, 3 ], [bar, 5 ], [baz, 9000]]
    .map { it[0] to it[1] } // return list of pairs: [(foo, 3), (bar, 5), (baz, 9000)]
    .toMap() // creates a map from your pairs