2017-09-10 57 views
0

任何人都知道如何修剪或消除字符串中的字符?我有一個來自UIlabel的數據,如「ABCDE1000001」,我只需要獲取數字。任何想法?修剪? Concat的?其他解決方案?Swift 3修剪字符

我也嘗試這一點,但在尋找其他的解決方案

let cardtrim = String.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF")) 
+1

如果輸入的是'A1B2C3'?如果根本沒有數字會怎麼樣? –

+0

檢查我的解決方案,它會過濾除數字之外的所有內容。 –

回答

0

你的代碼工作完美,但你需要調用它在其中存儲要修剪值的字符串變量。

let stringToTrim = "ABCDE1000001" 
let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet(charactersIn: "ABCDEF")) //value: 1000001 

一個更通用的解決方案是使用CharacterSet.decimalDigits.inverted只保留數字從字符串。

let cardtrim = stringToTrim.trimmingCharacters(in: CharacterSet.decimalDigits.inverted) 

注意trimmingCharacters只刪除從字符串的開頭和結尾的字符集字符,所以如果你有一個像ABC101A101一個字符串,並希望刪除它所有的字母,你將不得不使用一種不同的方法(例如正則表達式)。

+0

男人。讓我抱你。謝謝! –

+1

這***並不是最好的解決方案***。在不同的語言環境中,您不知道「十進制數字」可能是什麼。例如 - 它是否包含「。」 ? – Fattie

+0

@Fattie'CharacterSet'使用Unicode規範,所以它的所有子集都是獨立於區域的AFAIK。 –

-1

這個擴展將返回數字字符串中的這正是你所需要的

extension String { 

    var digits: String { 
     return components(separatedBy: CharacterSet.decimalDigits.inverted) 
      .joined() 
    } 
} 

Source

1

考慮到trimmingCharacters只刪除(連續)開頭或結尾匹配的字符集的字符。

要刪除一個字符串所有非數字字符我建議正則表達式

let string = "ABC12DE100YU0001" 
let trimmedString = string.replacingOccurrences(of: "\\D", with: "", options: .regularExpression) 
// -> "121000001" 
1

嘗試,而不是硬編碼charactersIn這個,這是一個動態的解決方案,將在絕不僅僅是strings其他變化工作ABCDEF

extension String { 

    var numbersOnly: String { 

     let numbers = self.replacingOccurrences(
      of: "[^0-9]", 
      with: "", 
      options: .regularExpression, 
      range:nil) 
     return numbers 
    } 
} 

let string = "A77BC66DE1001".numbersOnly // 77661001 
+0

這很酷!設置擴展字符串。謝啦! –

+0

你應該考慮使用類似這樣的東西,而不是硬編碼值。如果你的字符串看起來不同,那麼你的代碼將不起作用 –

+0

好點。爲通用目的。謝啦! –

0

你得SWIFTY:

let string = "ABC12DE100YU0001".filter { ("0"..."9").contains($0) } 

在擴展:

extension String { 

    func filterLetters() -> String { 
     return filter { ("0"..."9").contains($0) } 
    } 
}