のObjective-C
部分文字列をチェックするコードNSString
は次のとおりです。
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
しかし、どうすればSwiftでこれを実行できますか?
のObjective-C
部分文字列をチェックするコードNSString
は次のとおりです。
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
しかし、どうすればSwiftでこれを実行できますか?
回答:
Swiftでもまったく同じように呼び出すことができます。
Swift 4ではStringはCharacter
値のコレクションですが、Swift 2および3ではこれとは異なり、より簡潔なコード1を使用できます。
let string = "hello Swift"
if string.contains("Swift") {
print("exists")
}
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
PS。することを忘れないでくださいimport Foundation
An NSRange structure giving the location and length in the receiver of the first occurrence of aString. Returns {NSNotFound, 0} if aString is not found or is empty (@"").
たぶん、チェックするだけでnil
は正しく動作しないでしょう。
{NSNotFound, 0}
nilの場合はそれがnilとして表されます。実際の範囲である場合、Swift Range(オプション)として表示されます。涼しい。
NSString
の.rangeOfString()
。これは、呼び出しているString
の.rangeOfString()
ように宣言され、func rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
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以降から利用できます
あなたは拡張機能を記述することができます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
Foundation
周りにいない限り、もう必要ありません... containsString
うまくいきます。
ドキュメントから、containsString()
文字列の呼び出しは機能するはずです:
SwiftのString型はFoundationのNSStringクラスにシームレスにブリッジされます。CocoaまたはCocoa TouchのFoundationフレームワークを使用している場合、この章で説明する文字列機能に加えて、作成した任意の文字列値を呼び出すためにNSString API全体を使用できます。NSStringインスタンスを必要とする任意のAPIでString値を使用することもできます。
ただし、そのようには動作しないようです。
使用しようとするとsomeString.containsString(anotherString)
、次のようなコンパイル時エラーが発生します'String' does not contain a member named 'containsString'
。
そのため、いくつかのオプションが残っています。そのうちの1つは、他の2つをString
使用して明示的にObjective-Cにブリッジすることであり、最後の1つは、bridgeToObjectiveC()
NSString
String
NSString
ブリッジすることで、以下が得られます。
var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
println("YES")
}
文字列を明示的にとして入力するとNSString
、次のようになります。
var string: NSString = "hello Swift"
if string.containsString("Swift") {
println("YES")
}
既存のがある場合は、String
NSString(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")
}
[__NSCFString containsString:]: unrecognized selector sent to instance
。エラーはです。また、私は方法を見つけることができないcontainsString
のiOS 8のための新しいかどうかを確認するためのdevのドキュメント内を
別のもの。大文字と小文字区別オプションをサポートします。
Swift 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以降で使用できる大文字と小文字の区別のない機能。
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
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
import Foundation
。そうしないと機能しません。
import UIKit
のimport Foundation
少なくとも11のiOSとスイフト4と、必要とされる
使用する
func contains(_ str: String) -> Bool
let string = "hello Swift"
let containsSwift = string.contains("Swift")
print(containsSwift) // prints true
Swiftでは、次のコードを使用して非常に簡単にこれを行うことができます。
let string = "hello Swift";
let subString = (string as NSString).containsString("Swift")
if(subString){println("Exist")}
ここでの答えの単なる補遺。
以下を使用して、大文字と小文字を区別しないローカルテストを実行することもできます。
- (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リリースノートCopyright©2014 Apple Inc. All Rights Reserved。
OS X 10.10リリースノート Cocoa Foundationフレームワーク
NSStringには、次の2つの便利なメソッドがあります。
- (BOOL)containsString:(NSString *)str;
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
これが、すばやい遊び場での私の最初の刺しです。2つの新しい関数(containsとcontainsIgnoreCase)を提供して文字列を拡張します
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
どんなフィードバックでも歓迎します:)
ここでのすべての回答のうち、私はそれらが機能しないか、または少しハック(NSStringにキャストバック)していると思います。これに対する正しい答えは、異なるベータリリースで変更された可能性が非常に高いです。
これが私が使うものです:
let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
println("exists")
}
Beta 5では「!= nil」が必須になりました。
はい、どうぞ:
let s = "hello Swift"
if let textRange = s.rangeOfString("Swift") {
NSLog("exists")
}
このためのカスタムコードを記述する必要はありません。1.2バージョンから、Swiftには必要なすべてのメソッドがすでにあります。
count(string)
;contains(string, substring)
;startsWith(string, substring)
どうぞ!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)でのみ利用可能です。また、それをObjectiveCにブリッジすると、10.9でクラッシュします。NSStringをNSCFStringに渡そうとしています。違いはわかりませんが、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 beta2で非常に安定しています。プレイグラウンドを使用したり、プレイグラウンドのコマンドラインバージョンを使用したりしていません。適切なフレームワークがインポートされている場合、オートコンプリートが非常に役立ちます。
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
「こんにちは」が含まれているかどうかを確認します
let s = "Hello World"
if s.rangeOfString("Hello") != nil {
print("Yes it contains 'Hello'")
}
必要なFoundation
(またはUIKit
)フレームワークのインポートを含む、部分文字列をチェックするSwift 4の方法:
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の答えを逆流しています。これは完全に正しいことです。なぜ多くの回答がFoundation
のString.contains(subString: String)
方法を再現するためにそれほど多くの困難を経験するのかはわかりません。
// 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.
}
スウィフト3:ここでは、文字列を検索して、それが含まれているかどうかを確認したり、検索テキストに基づいてコレクションをフィルター処理したりできる、文字列のスマート検索拡張機能を示します。
iOS 8以降では、次の2つの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で文字列の検索機能と比較機能を最適に使用する方法を示す等号の例を含めています
//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)
}()
これの変形は、そのオブジェクトで欠落しているプロパティを分析する必要がある場合に発生します。文字列検索により、nil(オブジェクト作成時のデフォルト)に設定されている特定の部分文字列を見つけることができます。
lazy var isMissingProperty : Bool = {
guard self.myObject != nil else { return true }
let emptyPropertyValue = "myProperty = nil"
return (self.myObject!.description.rangeOfString(emptyPropertyValue) != nil) ? true : false
}()
ある文字列がその中に別のサブ文字列を含んでいるかどうかを確認したい場合は、次のようにして確認することもできます。
var name = String()
name = "John has two apples."
さて、この特定の文字列で、フルーツ名「apple」が含まれているかどうかを知りたい場合は、
if name.contains("apple")
{
print("Yes , it contains fruit name")
}
else
{
print(it does not contain any fruit name)
}
これがうまくいくことを願っています。
あなたはあなたが言及したことをただ行うことができます:
import Foundation
...
string.contains("Swift");
ドキュメントから:
スウィフトの
String
タイプは、財団のNSString
クラスにシームレスにつながっています。CocoaまたはCocoa TouchのFoundationフレームワークをNSString
使用しているString
場合、この章で説明する文字列機能に加えて、作成した値を呼び出すためにAPI 全体を使用できます 。NSStringインスタンスを必要とする任意のAPIでString値を使用することもできます。
あなたはする必要がありますimport Foundation
埋めるためにNSString
メソッドをし、スウィフトのStringクラスが使用できるようにします。
SWIFT 4はとても簡単です!!
if (yourString.contains("anyThing")) {
Print("Exist")
}
$ swift Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance. 1> print ("Ping") Ping 2> Print ("Ping") error: repl.swift:2:1: error: use of unresolved identifier 'Print' Print ("Ping") ^~~~~
機能しないテストされていない回答を提供する。印刷!=印刷。