将字符串类型列表拆分为Scala中的Sub列表

时间:2017-09-14 06:28:07

标签: scala

我创建了String list,如下所示

List("[MSC050,176484]", "[MSC050,176486]")

我尝试将此列表转换为子列表,如下面的代码所示。我认为这是实现我的任务的方法。

input.map(_.substring(5,13))

然后我得到如下列表

List(50,17648, 50,17648)

我想获得如下列表

List(50176484, 50176486)

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

我猜你是这个意思:

List(("MSC050",176484), ("MSC050",176486))

,即类型(String,Int)对的列表。如果是这样,那么答案就是:

list.map(p => p._1.takeRight(3) + p._2)

_1和_2是元组的元素。在这种情况下,_1引用String,_2引用Int

---修改

既然你已经澄清了列表的样子,那么答案就是:

list.map(_.foldLeft("")((newString, currentChar) => if(currentChar.isDigit) newString + currentChar else newString))

如果您要查找的是仅保留数字。 FoldLeft遍历String并同时创建一个新字符串,我基本上告诉它的是,如果当前char是一个数字然后将其添加到新字符串,如果不是简单地继续遍历旧字符串而不修改新字符串之一。

答案 1 :(得分:0)

一种方法是简单地删除子字符串中的所有逗号。

input.map(_.substring(5,13).replaceAll(",",""))
// res0: List[String] = List(5017648, 5017648)

答案 2 :(得分:0)

我采用更通用的方法:

import scala.util.matching
val pattern = raw"(\d+)".r
val result = List("[MSC050,176484]", "[MSC050,176486]").map(pattern.findAllIn(_).mkString("")).map(_.toLong)

删除不是数字的字符,然后将List [String]转换为List [Long]。