2016-10-25 20 views
0

内の文字のいずれかの発生はなく、すべてを交換してください。何かのように:は、私はユーザー・エラーが原因で複数の小数点を含むことが数字の文字列を持っている文字列

"2.3333.555.6664438" 

私は(最初または好ましくは最後のいずれか)の文字列に小数点のうちの1つを除くすべてを削除できるようにしたい:

"2.33335556664438" 

または

"23333555.6664438" 

これを達成する最も良い方法は何ですか?

答えて

3

グループに分割ピリオド文字で区切り、最初のグループ以外のすべてを連結します。 例(スウィフト3):

var string = "2.3333.555.6664438" 
let groups = string.components(separatedBy: ".") 
if groups.count > 1 { 
    string = groups[0] + "." + groups.dropFirst().joined() 
} 
print(string) // 2.33335556664438 

または:最初のピリオド文字を検索し、それ以降のすべての の発生を削除します。

var string = "2.3333.555.6664438" 
if let r = string.range(of: ".") { 
    string = string.substring(to: r.upperBound) 
     + string.substring(from: r.upperBound).replacingOccurrences(of: ".", with: "") 

} 
print(string) // 2.33335556664438 

(ただし、小数点の記号は、ロケールに依存し、必ずしもピリオド文字であることに注意してください。たとえば、ドイツではコンマです。)

1

文字の配列と見なすこともできる文字列を繰り返します。小数点の1つを保持できるようにフラグを設定します。ループが1つ渡ったときにフラグを変更し、フラグ....したがって小数点は安全で文字列に残っています....残りの部分はどこにでも持ち去ります。.... ループの単純な実装とif elseモジュール

+0

これは私が考えていたものです。私はちょうどある種の便利な方法でより良い方法があることを望んでいました。 – DJSK

0

私は、プロトコルの拡張機能を作成するために、マーティン・Rのソリューションを使用して終了しました。 (Swift 2.3)

var string = "2.3333.555.6664438".removeDuplicateCharacters(".") 

extension String { 

    func removeDuplicateCharacters(input: String) -> String { 
    let string = self 
    var trimmedString = "" 
    let preGroups = string.componentsSeparatedByString(input) 
    if preGroups.count > 1 { 
     trimmedString = preGroups[0] + input + preGroups.dropFirst().joinWithSeparator("") 
     return trimmedString 
    } else { 
     return string 
    } 
    } 
} 
関連する問題