2017-09-10 26 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) } 
    } 
}