2014-09-21 14 views
10

Mam ten sam problem jak w tej kwestii:Swift: String zawiera ciąg (bez użycia NSString)?

How do I check if a string contains another string in Swift?

Ale teraz kilka miesięcy później zastanawiam się, czy można to zrobić bez użycia NSString? Ja ładny i prosty zawierający-metoda byłaby w porządku. Przeszukałem sieć i dokumentację, ale nic nie znalazłem!

+1

Możliwy duplikat [W jaki sposób mogę sprawdzić, jeśli ciąg zawiera inny ciąg w Swift?] (Http://stackoverflow.com/questions/24034043/how-do-i-check-if-a-string -contains-another-string-in-swift) –

Odpowiedz

27

sam sposób tylko z Swift składnię:

let string = "This is a test. This is only a test" 

if string.rangeOfString("only") != nil { 
    println("yes") 
} 

Swift 3.0

if str.range(of: "abc") != nil{ 
    print("Got the string") 
} 
+1

co z "jest", czy mogę uzyskać ostatnie "jest"? – Zam

+0

@Zam W takim przypadku zwróci pierwszą koincydencję/dopasowanie dla 'is', a jeśli wydrukujesz' range', otrzymasz coś w rodzaju '2 .. <4' {^_^} -->' jeśli pozwolisz zakresowi = string.rangeOfString ("jest") {print (range)} ' – eMdOS

+0

Czy ta składnia jest nadal używana w Swift 2? –

0

pisałem rozszerzenie na ciąg dla SWIFT 3.0 tak, że mogę po prostu zadzwonić absoluteString.contains(string: "/kredit/")

extension String { 
    public func contains(string: String)-> Bool { 
     return self.rangeOfString(string) != nil 
    } 

}

2

String faktycznie zapewnia funkcję "zawiera" przez StringProtocol.
Przedłużenie ogóle potrzebne:

let str = "asdf" 
print(str.contains("sd") ? "yep" : "nope") 

enter image description here

https://developer.apple.com/reference/swift/string https://developer.apple.com/documentation/swift/stringprotocol


Jeśli chcesz sprawdzić, czy ciąg pasuje do określonego wzorca, mogę polecić artykuł NSHipster o NSRegularExpressions: http://nshipster.com/nsregularexpression/

+0

To sprawdza, czy ciąg zawiera pewną postać! –

+1

@EmilMarashliev To prawda. Ale dodatkowo możesz sprawdzić wszystko, co jest zgodne z 'StringProtocol' - tak też działa dla' String'. –

+0

Ha, masz całkowitą rację, że pochodzi od 'StringProtocol' https://developer.apple.com/documentation/swift/stringprotocol/2923423- zawiera bardziej wygodny i elegancki sposób niż' range (of:) ' –

0

tylko po to, aby zademonstrować wykorzystanie opcji.

var string = "This is a test. This is only a test. Not an Exam" 

if string.range(of:"ex") != nil { 
    print("yes") 
} 
if string.range(of:"ex", options: String.CompareOptions.caseInsensitive) != nil { 
    print("yes") 
} 
Powiązane problemy