2017-08-03 5 views
0

文字列と文字列を変更する関数を持っています。 私はたとえば修正Scalaの範囲で指定された部分文字列を置換します。

で最初の部分を置き換える機能取得したい:ここ

val initialString = "abcdefgh" 
// range for getting substring, thus substring is "abc" 
val (start, end) = (0, 3) 
// function for changes a string 
def f(s: String) = s + "@" 
val modifiedSubstring = f(initialString.substring(start, end)) // "[email protected]" 
// I don't know hot to implement desiredFunction 
val res = desiredFunction(initialString, start, end, f) // "[email protected]" 
+1

'start'と' end'の意義は何ですか?彼らは 'ab @ cdef'にどのようにつながるのでしょうか? –

+0

@AlvaroCarrasco私は質問を修正しました –

+0

'initialString.substring(0、start)+ f(initialString.substring(start、end))+ initialString.substring(end)'これは何ですか? – Dima

答えて

1

私はスカラ座、Javaで文字列、およびおそらく他の言語で動作しているときに、これは標準であり、あなたは非包括範囲を使用することをお勧め。私は非包含的な範囲を仮定します。

slicepatchはここに役立ちます。

def applyOnSlice(s: String, start: Int, end: Int, fn: String => String) = 
    s.patch(
    start, 
    fn(s.slice(start, end)), 
    end) 
+0

はい、私は非包括的な範囲について同意しました。私は不注意により終了範囲を含めました。 –

2

はあなたが後にしているものです、私は理由から、インデックスに+1を追加しなければならなかったことに注意してくださいScalaのString関数はそうではありませんが、あなたの範囲は包括的です。

def desiredFunction(string: String, startIndex: Int, endIndex: Int, replaceFunc: (String) => String) = { 

    // Get the first part 
    val a = string.substring(0, startIndex) 

    // Get the middle part and do your replacing 
    val b = replaceFunc(string.substring(startIndex, endIndex + 1)) 

    // Get the last part 
    val c = string.substring(endIndex + 1) 

    // Put it all together and return 
    a + b + c 
} 
関連する問題