我创建了String list,如下所示
List("[MSC050,176484]", "[MSC050,176486]")
我尝试将此列表转换为子列表,如下面的代码所示。我认为这是实现我的任务的方法。
input.map(_.substring(5,13))
然后我得到如下列表
List(50,17648, 50,17648)
我想获得如下列表
List(50176484, 50176486)
任何人都可以帮忙吗?
答案 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]。