programing

Swift에서 문자열에 다른 문자열이 포함되어 있는지 확인하려면 어떻게 해야 합니까?

lovejava 2023. 5. 9. 21:57

Swift에서 문자열에 다른 문자열이 포함되어 있는지 확인하려면 어떻게 해야 합니까?

Objective-C 하기 위한 NSString다음과 같습니다.

NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
    NSLog(@"exists");
}

하지만 스위프트에서 어떻게 해야 합니까?

Swift와 동일한 통화를 수행할 수 있습니다.

스위프트 4 & 스위프트 5

4 은 Swift 4의 String 입니다.Character스위프트 2와 3에서는 이와 같지 않았으므로 보다 간결한1 코드를 사용할 수 있습니다.

let string = "hello Swift"
if string.contains("Swift") {
    print("exists")
}

스위프트 3.0+

var string = "hello Swift"

if string.range(of:"Swift") != nil { 
    print("exists")
}

// alternative: not case sensitive
if string.lowercased().range(of:"swift") != nil {
    print("exists")
}

올드 스위프트

var string = "hello Swift"

if string.rangeOfString("Swift") != nil{ 
    println("exists")
}

// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
    println("exists")
}

저를 포함한 몇몇 사람들이 전화를 해서 이상한 문제에 부딪혔기 때문에 이것이 도움이 되는 해결책이 되길 바랍니다.containsString().1

잊지 마. 잊지 마세요.import Foundation

각주

  1. 문자열에 수집 기능을 사용하면 예를 들어 이모티콘이나 악센트가 있는 문자와 같은 다른 그래프 클러스터를 처리할 때 예상치 못한 결과를 얻을 수 있는 몇 가지 에지 케이스가 있다는 것만 기억하십시오.

연장방식

스위프트 4

extension String {
    func contains(find: String) -> Bool{
        return self.range(of: find) != nil
    }
    func containsIgnoringCase(find: String) -> Bool{
        return self.range(of: find, options: .caseInsensitive) != nil
    }
}

var value = "Hello world"

print(value.contains("Hello")) // true
print(value.contains("bo"))    // false

print(value.containsIgnoringCase(find: "hello"))    // true
print(value.containsIgnoringCase(find: "Hello"))    // true
print(value.containsIgnoringCase(find: "bo"))       // false

일반적으로 Swift 4에는 메서드가 포함되어 있지만 iOS 8.0+에서 사용할 수 있습니다.


스위프트 3.1

장을쓸수있다니습확명을 쓸 수 .contains:그리고.containsIgnoringCase위해서String

extension String { 

   func contains(_ find: String) -> Bool{
     return self.range(of: find) != nil
   }

   func containsIgnoringCase(_ find: String) -> Bool{
     return self.range(of: find, options: .caseInsensitive) != nil 
   }
 }

이전 버전의 스위프트

extension String {

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

    func containsIgnoringCase(find: String) -> Bool{
       return self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
     }
}

예:

var value = "Hello world"

print(value.contains("Hello")) // true
print(value.contains("bo"))    // false

print(value.containsIgnoringCase("hello"))    // true
print(value.containsIgnoringCase("Hello"))    // true
print(value.containsIgnoringCase("bo"))       // false

서류상으로는 전화가containsString() a a String은 작동해야 합니다.

Swift의 String 유형은 Foundation의 NSString 클래스와 원활하게 연결됩니다.Cocoa 또는 Cocoa Touch에서 Foundation 프레임워크를 사용하는 경우 이 장에서 설명하는 String 기능 외에 사용자가 작성한 String 값을 호출할 수 있는 전체 NSString API가 제공됩니다.문자열 값은 NSString 인스턴스가 필요한 API에도 사용할 수 있습니다.

하지만, 그것은 그렇게 작동하지 않는 것 같습니다.

당신이 하려고 합니다.someString.containsString(anotherString)입니다.'String' does not contain a member named 'containsString'.

몇 선택지가 있는데, 그 중 으로 여러분의 하 고 는 의 객 비 스 니 즈 환 경 을 라 몇 서 다 니 가 습 있 남 지 옵 아 션 이 경 을 ▁so 환 ▁your 스 , 니 비 즈 따 ▁options 그String를로하여목표용-C사를 bridgeToObjectiveC()다른 두 가지는 명시적으로 사용하는 것을 포함합니다.NSString그리고 마지막 하나는 캐스팅을 포함합니다.String완전히NSString

브리징을 통해 얻을 수 있는 이점:

var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
    println("YES")
}

으로 자열을다같이명입으력로다니합적시음과문▁an▁the▁as다▁▁by▁stringNSString다음을 얻을 수 있습니다.

var string: NSString = "hello Swift"
if string.containsString("Swift") {
    println("YES")
}

기존 시스템이 있는 경우StringNSString(string: 문자열)을 사용하여 NSString을 초기화할 수 있습니다.

var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
    println("YES")
}

그리고 마지막으로, 당신은 현존하는 것을 캐스팅할 수 있습니다.String완전히NSString하기와 같이

var string = "hello Swift"
if (string as NSString).containsString("Swift") {
    println("YES")
}

또 하나.대/소문자 구분 옵션을 지원합니다.

스위프트 3.0

struct MyString {
  static func contains(_ text: String, substring: String,
                       ignoreCase: Bool = true,
                       ignoreDiacritic: Bool = true) -> Bool {

    var options = NSString.CompareOptions()

    if ignoreCase { _ = options.insert(NSString.CompareOptions.caseInsensitive) }
    if ignoreDiacritic { _ = options.insert(NSString.CompareOptions.diacriticInsensitive) }

    return text.range(of: substring, options: options) != nil
  }
}

사용.

MyString.contains("Niels Bohr", substring: "Bohr") // true

iOS 9+

대/소문자 구분 안 함 기능은 iOS 9부터 사용할 수 있습니다.

if #available(iOS 9.0, *) {
  "Für Elise".localizedStandardContains("fur") // true
}

7및 2 Xcode 7.1 및 Swift 2.1 준containsString()저한테는 잘 작동하고 있어요.

let string = "hello swift"
if string.containsString("swift") {
    print("found swift")
}

스위프트 4:

let string = "hello swift"
if string.contains("swift") {
    print("found swift")
}

대소문자를 구분하지 않는 Swift 4의 예:

let string = "Hello Swift"
if string.lowercased().contains("swift") {
    print("found swift")
}

또는 대소문자를 구분하지 않고 사용하는 경우String확장명:

extension String {
    func containsIgnoreCase(_ string: String) -> Bool {
        return self.lowercased().contains(string.lowercased())
    }
}

let string = "Hello Swift"
let stringToFind = "SWIFT"
if string.containsIgnoreCase(stringToFind) {
    print("found: \(stringToFind)")  // found: SWIFT
}
print("string: \(string)")
print("stringToFind: \(stringToFind)")

// console output:
found: SWIFT
string: Hello Swift
stringToFind: SWIFT

Swift 4.2에서

사용하다

func contains(_ str: String) -> Bool

let string = "hello Swift"
let containsSwift = string.contains("Swift")
print(containsSwift) // prints true

> SWIFT 3.0에서

let str = "Hello Swift"
if str.lowercased().contains("Swift".lowercased()) {
    print("String Contains Another String")
} else {
    print("Not Exists")
}

산출량

String Contains Another String

Swift에서는 다음 코드를 사용하여 매우 쉽게 이 작업을 수행할 수 있습니다.

let string = "hello Swift";
let subString = (string as NSString).containsString("Swift")
if(subString){println("Exist")}

여기에 있는 모든 답변 중에서, 저는 그들이 작동하지 않거나 약간의 해킹이라고 생각합니다(NSString으로 캐스트백).이에 대한 정답은 다른 베타 릴리스에 따라 변경되었을 가능성이 높습니다.

제가 사용하는 것은 다음과 같습니다.

let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
    println("exists")
}

베타 5에서는 "!= 0"이 필요하게 되었습니다.

여기 답의 부록일 뿐입니다.

다음을 사용하여 로컬 대소문자 구분 안 함 테스트를 수행할 수도 있습니다.

 - (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString

예:

    import Foundation

    var string: NSString  =  "hello Swift"
   if string.localizedCaseInsensitiveContainsString("Hello") {
    println("TRUE")
}

갱신하다

이 문서는 iOS 및 Mac OS X 10.10.x용 Foundation Framework의 일부이며 원래 게시 당시에는 10.10의 일부였습니다.

문서 생성 : 2014-06-05 12:26:27-0700 OS X 릴리즈 노트 저작권 © 2014 Apple Inc.무단 전재 금지.

OS X 10.10 릴리스 정보 코코아 기초 프레임워크

NSString에는 다음과 같은 두 가지 편리한 방법이 있습니다.

- (BOOL)containsString:(NSString *)str;

- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;

여기 빠른 운동장에서 제가 처음으로 시도한 것이 있습니다.두 개의 새로운 기능(포함 및 포함)을 제공하여 String을 확장합니다.케이스 무시)

extension String {
    func contains(other: String) -> Bool{
        var start = startIndex

        do{
            var subString = self[Range(start: start++, end: endIndex)]
            if subString.hasPrefix(other){
                return true
            }

        }while start != endIndex

        return false
    }

    func containsIgnoreCase(other: String) -> Bool{
        var start = startIndex

        do{
            var subString = self[Range(start: start++, end: endIndex)].lowercaseString
            if subString.hasPrefix(other.lowercaseString){
                return true
            }

        }while start != endIndex

        return false
    }
}

이렇게 사용합니다.

var sentence = "This is a test sentence"
sentence.contains("this")  //returns false
sentence.contains("This")  //returns true
sentence.containsIgnoreCase("this")  //returns true

"This is another test sentence".contains(" test ")    //returns true

어떤 피드백이든 환영합니다 :)

말씀하신 대로 하시면 됩니다.

import Foundation
...
string.contains("Swift");

문서에서:

스위프트의String은 Foundation Foundation과 하게 연결됩니다.NSString Cocoa Touch에서 class. 만약 당신이 코코아 또는 코코아 터치의 파운데이션 프레임워크로 작업하고 있다면, 전체NSString는 모든 API를 할 수 .String이 장에서 설명하는 String 기능 외에 사용자가 작성하는 값입니다.문자열 값은 NSString 인스턴스가 필요한 API에도 사용할 수 있습니다.

당신은 해야 합니다.import FoundationNSString메서드를 사용하여 Swift의 String 클래스에서 사용할 수 있도록 합니다.

여기 있습니다.

let s = "hello Swift"
if let textRange = s.rangeOfString("Swift") {
    NSLog("exists")
}

사용자 지정 코드를 작성할 필요가 없습니다.1.2 버전부터 Swift는 이미 필요한 모든 방법을 갖추고 있습니다.

  • 길이 : " 문열길가져기오":count(string);
  • 문자열이 포함되어 합니다.contains(string, substring);
  • 문자열로 합니다.startsWith(string, substring)

인 스위프트 3

if((a.range(of: b!, options: String.CompareOptions.caseInsensitive, range: nil, locale: nil)) != nil){
    print("Done")
}

여기예요.Xcode 8과 Swift 3을 준비합니다.

import UIKit

let mString = "This is a String that contains something to search."
let stringToSearchUpperCase = "String"
let stringToSearchLowerCase = "string"

mString.contains(stringToSearchUpperCase) //true
mString.contains(stringToSearchLowerCase) //false
mString.lowercased().contains(stringToSearchUpperCase) //false
mString.lowercased().contains(stringToSearchLowerCase) //true

string.containsString은 10.10 Yosemite(아마도 iOS8)에서만 사용할 수 있습니다.또한 10.9에서 Objective C 충돌로 연결합니다.NSF 문자열을 NSF 문자열로 전달하려고 합니다.차이는 모르겠지만 OS X 10.9 앱에서 이 코드를 실행하면 10.9 barfs라고 말할 수 있습니다.

다음은 Swift와 10.9 및 10.10의 차이점입니다. https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html containsString은 10.10에서만 사용할 수 있습니다.

위의 문자열 범위는 10.9에서 잘 작동합니다.10.9에서 개발하는 것이 Xcode 베타2로 매우 안정적이라는 것을 알게 되었습니다.저는 놀이터를 통해서나 놀이터의 명령줄 버전을 사용하지 않습니다.적절한 프레임워크를 가져오면 자동 완성이 매우 도움이 된다는 것을 알게 되었습니다.

Xcode 8/Swift 3 버전:

let string = "hello Swift"

if let range = string.range(of: "Swift") {
    print("exists at range \(range)")
} else {
    print("does not exist")
}

if let lowercaseRange = string.lowercased().range(of: "swift") {
    print("exists at range \(lowercaseRange)")
} else {
    print("does not exist")
}

사용할 수도 있습니다.contains:

string.contains("swift") // false
string.contains("Swift") // true

필요한 부분을 포함하여 서브스트링을 확인하는 빠른 4가지 방법Foundation(또는)UIKit) 프레임워크 가져오기:

import Foundation // or UIKit

let str = "Oh Canada!"

str.contains("Can") // returns true

str.contains("can") // returns false

str.lowercased().contains("can") // case-insensitive, returns true

~하지 않는 한Foundation(또는)UIKit) 프레임워크를 가져왔습니다.str.contains("Can")컴파일러 오류가 발생합니다.


이 대답은 manojlds의 대답을 반박하는 것이고, 그것은 완전히 맞습니다.왜 이렇게 많은 답변이 이렇게 많은 문제를 다시 작성하는 데 어려움을 겪는지 모르겠습니다.FoundationString.contains(subString: String)방법.

swift 4의 새로운 구문으로 당신은 그냥

string.contains("Swift 4 is the best")

문자열은 문자열 변수입니다.

스위프트 5, 대소문자 구분 안 함:

if string.localizedLowercase.contains("swift".localizedLowercase){
    // your code here
}

'Hello'가 포함되어 있는지 확인합니다.

let s = "Hello World"

if s.rangeOfString("Hello") != nil {
    print("Yes it contains 'Hello'")
}
// Search string exist in employee name finding.
var empName:NSString! = employeeDetails[filterKeyString] as NSString

Case sensitve search.
let rangeOfSearchString:NSRange! = empName.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch)

// Not found.
if rangeOfSearchString.location != Foundation.NSNotFound
{
    // search string not found in employee name.
}
// Found
else
{
    // search string found in employee name.
}

Swift 3: 여기서 문자열에 포함되어 있는지 확인하거나 검색 텍스트를 기반으로 컬렉션을 필터링하기 위해 문자열을 검색할 수 있는 스마트 검색 확장자를 볼 수 있습니다.

https://github.com/magonicolas/Swift-Smart-String-Search

한 문자열에 다른 하위 문자열이 포함되어 있는지 확인하고 싶다면 이렇게 확인할 수도 있습니다.

var name = String()  
name = "John has two apples." 

자, 이 특정 문자열에서 과일 이름 '사과'가 포함되어 있는지 알고 싶다면 할 수 있습니다.

if name.contains("apple") {  
  print("Yes , it contains fruit name")    
} else {    
  print("it does not contain any fruit name")    
}    

이것이 당신에게 효과가 있기를 바랍니다.

iOS 8 이상에서는 이 두 가지를 사용할 수 있습니다.NSString메서드:

@availability(iOS, introduced=8.0)
func containsString(aString: String) -> Bool

@availability(iOS, introduced=8.0)
func localizedCaseInsensitiveContainsString(aString: String) -> Bool

몇 가지 흥미로운 사용 사례를 발견했습니다.이러한 변형은 rangeOfString 방법을 사용하며 Swift 2.0에서 Strings의 검색 및 비교 기능을 가장 잘 사용하는 방법을 보여주는 동등한 예제를 포함합니다.

//In viewDidLoad() I assign the current object description (A Swift String) to self.loadedObjectDescription
self.loadedObjectDescription = self.myObject!.description

나중에 self.myObject를 변경한 후 다음 문자열 비교 루틴(Bool을 반환하는 게으른 변수로 설정)을 참조할 수 있습니다.이를 통해 언제든지 상태를 확인할 수 있습니다.

lazy var objectHasChanges : Bool = {
        guard self.myObject != nil else { return false }
        return !(self.loadedObjectDescription == self.myObject!.description)
    }()

이러한 변형은 때때로 해당 개체에서 누락된 속성을 분석해야 할 때 발생합니다.문자열 검색을 사용하면 0(개체를 만들 때 기본값)으로 설정된 특정 하위 문자열을 찾을 수 있습니다.

    lazy var isMissingProperty : Bool = {
        guard self.myObject != nil else { return true }
        let emptyPropertyValue = "myProperty = nil"
        return (self.myObject!.description.rangeOfString(emptyPropertyValue) != nil) ? true : false
    }()

SWIFT 4는 매우 쉽습니다!!

if (yourString.contains("anyThing")) {
   print("Exist")
}

언급URL : https://stackoverflow.com/questions/24034043/how-do-i-check-if-a-string-contains-another-string-in-swift