2015-12-21 278 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) 
    } 
}