Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何使用scala拆分字符串?_String_Scala_Split - Fatal编程技术网

String 如何使用scala拆分字符串?

String 如何使用scala拆分字符串?,string,scala,split,String,Scala,Split,我有一个下面的字符串,我想用scala拆分它 "myInfo": "myName-name;model-R210;" 我想分割myInfo字符串的值,这样我就可以分别访问myName及其值。 e、 g.myName:名称、型号:R210等 我使用以下代码来拆分字符串- (mainString \ "myInfo").as[String].split("\\;").toList.map(_.split("\\-")) 其中,mainString是Json,包含“myInfo”键值对 如何拆分字

我有一个下面的字符串,我想用scala拆分它

"myInfo": "myName-name;model-R210;"
我想分割myInfo字符串的值,这样我就可以分别访问myName及其值。 e、 g.myName:名称、型号:R210等

我使用以下代码来拆分字符串-

(mainString \ "myInfo").as[String].split("\\;").toList.map(_.split("\\-"))
其中,mainString是Json,包含“myInfo”键值对


如何拆分字符串以用“-”分隔并访问它?

您可以获得
映射[string,string]
如下:

val data: Map[String,String] = (mainString \ "myInfo").as[String]
    .split("\\;").map(_.split("\\-").toList)
    .collect { 
      case key :: value :: _ => key -> value
    }.toMap
然后访问您的值:

val name = data.getOrElse("myName", "DefaultNameIfMissing")

您可以获得
映射[String,String]
如下所示:

val data: Map[String,String] = (mainString \ "myInfo").as[String]
    .split("\\;").map(_.split("\\-").toList)
    .collect { 
      case key :: value :: _ => key -> value
    }.toMap
然后访问您的值:

val name = data.getOrElse("myName", "DefaultNameIfMissing")

首先,在JSON文档中将复杂数据结构编码为字符串的人真是太丢脸了;你根本不需要解析它。如果它在你的控制之下,我会把它改成

"myInfo": {
  "myName": "name",
  "model": "R210"
}
但如果无法更改输入,则只需执行以下操作即可获得所需的地图:

val myInfo = ((mainString \ "myInfo").as[String] split ';' map (_ split '-') collect { case Array(k,v) => k->v } ).toMap
不需要从中间结果中创建列表——这只会减慢速度。只需拆分一个字符,而不是一个字符串(可以编译为正则表达式)


请注意,
collect
会导致忽略任何没有连字符或多个连字符的组件;你可能想在那里做些别的事情。

首先,不管是谁把一个复杂的数据结构编码成JSON文档中的字符串,你都会感到羞耻;你根本不需要解析它。如果它在你的控制之下,我会把它改成

"myInfo": {
  "myName": "name",
  "model": "R210"
}
但如果无法更改输入,则只需执行以下操作即可获得所需的地图:

val myInfo = ((mainString \ "myInfo").as[String] split ';' map (_ split '-') collect { case Array(k,v) => k->v } ).toMap
不需要从中间结果中创建列表——这只会减慢速度。只需拆分一个字符,而不是一个字符串(可以编译为正则表达式)


请注意,
collect
会导致忽略任何没有连字符或多个连字符的组件;你可能想在那里做些别的事情。

你所说的分别访问myName及其值是什么意思?你想把它们保存在元组中吗?比如
((myName,name),(model,R210))
?您所说的
分别访问myName及其值是什么意思?你想把它们保存在元组中吗?像
((我的名字,名字),(型号,R210))
?正是我想要的。。如何从该列表中访问“myName”?如果我不想使用.getOrElse方法怎么办?如果我不想使用.getOrElse方法怎么办。我有一个包含整数字段的字段。当我使用data.get(“cNumber”)时,它返回字符串。有没有办法返回Intvalue@Vishwas:我建议您仔细阅读Scala的
映射
选项
类型,并在必要时提出另一个问题。如果你想从
Map[String,String]
中得到一个int,你可以做类似
data.get(“someInt”).Map(uu.toInt).getOrElse(0)
。Hi@Mikesname我正在使用类似的策略将我的文件字符串分割成对象映射,请参见。但是它真的很慢。如果我们转换为数组[(字符串,字符串)],可以更快吗?正是我想要的。。如何从该列表中访问“myName”?如果我不想使用.getOrElse方法怎么办?如果我不想使用.getOrElse方法怎么办。我有一个包含整数字段的字段。当我使用data.get(“cNumber”)时,它返回字符串。有没有办法返回Intvalue@Vishwas:我建议您仔细阅读Scala的
映射
选项
类型,并在必要时提出另一个问题。如果你想从
Map[String,String]
中得到一个int,你可以做类似
data.get(“someInt”).Map(uu.toInt).getOrElse(0)
。Hi@Mikesname我正在使用类似的策略将我的文件字符串分割成对象映射,请参见。但是它真的很慢。如果我们转换为数组[(字符串,字符串)],可以更快吗?