2016-11-12 8 views
2

文字列内の文字を削除したい。文字列内のその文字のすべての要素ではありません。例。私は"|red|red|red|red|""red|red|red|red"に変えたいと思います。文字列の最初と最後のインデックスが特定の文字であるかどうかをチェックし、その場合は削除する関数を作成します。F#特定の文字列インデックスのcharを削除/置換

は、これまでのところ、私はこのようなものが出ている:

let rec inputFormatter (s : string) : string = 
    match s.[1] with 
    |'|'|','|'.'|'-' -> // something that replaces the char with "" in the string s 
         (inputFormatter s) 
    |_ -> match s.[(String.length s)] with 
      |"|"|","|"."|"-" -> // same as above. 
           (inputFormatter s) 
     |_ -> s 

誰も私が私が私の機能に書くことができるかを把握助けることができますか?もちろん、あなたはそれがもっと便利であると分かっていれば、まったく別の機能を思いつくこともできます。

ありがとうございます!

+1

文字列インスタンスの既存の '' .Replace''メソッドを使用しないのはなぜですか? – Gustavo

+0

これは文字列内のcharのすべての要素を削除するためですか?私がs.Inに行くならば、文字列内のすべてのパイプを削除します。 – Nulle

+5

[string.IndexOf]を結合します(https://msdn.microsoft.com/en-us/library/kwb0bwyd( [string.Remove]を使用して(v = vs.110).aspx)、[string.LastIndexOf](https://msdn.microsoft.com/en-us/library/0w96zd3d(v = vs.110).aspx) https://msdn.microsoft.com/en-us/library/d8d7z2kk(v=vs.110).aspx)。 –

答えて

4
let replace elem (str:string) =  
    let len = String.length str 
    if str.[0] = elem && str.[len-1] = elem then str.[1..len-2] 
    else str 

使用法:マークは、より良いオプションが再で示唆したように

let replace elem (str:string) =  
    let lens = String.length str 
    let lene = String.length elem  
    if lene <= lens && str.[0..lene-1] = elem && str.[lens-lene..lens-1] = elem then str.[lene..lens-lene-1] 
    else str 

UPDATE

replace '|' "|red|red|red|red|" 

// val it : string = "red|red|red|red" 

そして、ここではなく、文字の文字列での作業バージョンですTrim

let replace (elem:string) (str:string) = str.Trim(elem.ToCharArray()) 
+0

ありがとうございます!!!!! – Nulle

+3

[string.Trim](https://msdn.microsoft.com/en-us/library/d4tt83f9(v = vs.110).aspx)を使用しないのはなぜですか? –

0

私はGutavoの修正を使用して終了しませんでしたが、私自身の機能を修正するように私にインスピレーションを与えた彼でした!

let rec theButcher (s : string) : string = 
    match s.[0] with 
    |'|'|','|'.'|'-'|' ' -> (theButcher s.[1..]) 
    |_ -> match s.[(String.length s)-1] with 
      |'|'|','|'.'|'-'|' ' -> (theButcher s.[0..((String.length s)-2)]) 
      |_ -> s 
関連する問題