2015-12-21 230 views
-1

我有一个这样的字符串:如何在scala中用分隔符分割字符串?

val str = "3.2.1" 

而且我想这样做基于它的一些操作。

我也会分享我所想要做的,这将是很好,如果你可以分享您的建议:

即时通讯做自动化的一些网站,并在此基础上串,我需要做一些动作。

所以:

第一个数字 - 我将需要值来选择:值= “STR [0]”

第二位数字 - 我将需要值来选择:值=“STR [0] +“。”+ str [1]“

第三位 - 我需要按值来选择:value =”str [0] +“。”+ str [1] +“。”+ str [2]“

正如你所看到的,我需要选择的第二个域名是firstdigit.seconddigit,第三个域名是firstdigit.seconddigit.thirddigit

回答

0

尝试以下操作:

scala> "3.2.1".split(".") 
res0: Array[java.lang.String] = Array(string1, string2, string3) 
+1

难道你忘了把 “\\” 之前 “” ? – nikiforo

2

您可以使用模式为这个匹配。 首先创建正则表达式:

@ val pattern = """(\d+)\.(\d+)\.(\d+)""".r 
pattern: util.matching.Regex = (\d+)\.(\d+)\.(\d+) 

,那么你可以用它来模式匹配:

@ "3.4.342" match { case pattern(a, b, c) => println(a, b, c) } 
(3,4,342) 

,如果你并不需要所有的数字,你可以举例来说做到这一点

"1.2.0" match { case pattern(a, _, _) => println(a) } 
1 

如果你想例如采取前两个数字,你可以做

@ val twoNumbers = "1.2.0" match { case pattern(a, b, _) => s"$a.$b" } 
twoNumbers: String = "1.2" 
0

这一个:

object Splitter { 
    def splitAndAccumulate(string: String) = { 
    val s = string.split("\\.") 
    s.tail.scanLeft(s.head){ case (acc, elem) => 
     acc + "." + elem 
    } 
    } 
} 

通过测试:

test("Simple"){ 
    val t = Splitter.splitAndAccumulate("1.2.3") 

    val answers = Seq("1", "1.2", "1.2.3") 

    t.zip(answers).foreach{ case (l, r) => 
    assert(l == r) 
    } 
}