首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Scala中用两个分隔符(,和"")拆分字符串

在Scala中用两个分隔符(,和"")拆分字符串
EN

Stack Overflow用户
提问于 2018-06-08 02:23:31
回答 2查看 317关注 0票数 0

我有一个类似下面的记录。

1,2018,Abc,2018-04-19,Abc,b,n,0,Abc,33,0,Abc,"Sql,Xyz",Abc,Abc,

我想用逗号分隔符来分割字符串,但我希望Sql,Xyz作为单个字符串,而不是像“SqlXyz"这样的两个不同的字符串。有人能帮帮我吗。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-08 04:38:31

这可能对你有用。

代码语言:javascript
复制
def mySplit(str: String): List[String] = {
  var elems = List[String]()

  // break down by quotes first
  val quotes = str.split("\"")
  for(i <- 0 to quotes.length - 1) {

    if(i % 2 == 0) {
      // break down by commas second
      val subelems = quotes(i).split(",")
      for(j <- 0 to subelems.length - 1) {
        if(!subelems(j).isEmpty)
          elems = elems :+ subelems(j)
          // ignore empty elements
      }

    } else {
      // save "whole strings" and
      // don't break into commas
      elems = elems :+ quotes(i)
    }
  }

  return elems
}

像这样使用它:

代码语言:javascript
复制
// quick test
val str = "1,2018,Abc,2018-04-19,Abc,Abc,Abc,b,n,0,Abc,33,0,Abc,\"Sql, Xyz\",Abc,Abc"
val list = mySplit(str)

这是scalafiddle.io

票数 1
EN

Stack Overflow用户

发布于 2018-06-09 02:49:50

我已经这样做了,通过使用如下所示的regex

代码语言:javascript
复制
val str= "1,2018,Abc,2018-04-19,Abc,Abc,Abc,b,n,0,Abc,33,0,Abc,\"Sql, Xyz\",Abc,Abc"
val list=str.split(",(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)")

list.foreach( x => println(x))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50747855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档