সুইফট শুরু হয় পদ্ধতি সহ?


151

স্টার্ট উইথ () পদ্ধতি বা সুইফটে অনুরূপ কিছু আছে কি?

আমি মূলত একটি নির্দিষ্ট স্ট্রিং অন্য স্ট্রিং দিয়ে শুরু হয় কিনা তা খতিয়ে দেখার চেষ্টা করছি। আমি এটি ক্ষেত্রে সংবেদনশীল হতে চান।

আপনি যেহেতু বলতে সক্ষম হবেন, আমি কেবল একটি সাধারণ অনুসন্ধান বৈশিষ্ট্যটি করার চেষ্টা করছি তবে মনে হচ্ছে আমি এই মুহূর্তে খারাপভাবে ব্যর্থ হব।

এটি আমি চাই:

"সা" টাইপ করার ফলে আমাকে "সান আন্তোনিও", "সান্তা ফে" ইত্যাদির ফলাফল দেওয়া উচিত। "এসএ" বা "সা" বা "এসএ" টাইপ করার পরেও "স্যান আন্তোনিও" বা "সান্তা ফে" ফেরত আসা উচিত।

আমি ব্যবহার করছিলাম

self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil 

iOS9 এর আগে এবং এটি ঠিক কাজ করছিল। আইওএস 9 এ আপগ্রেড করার পরে, এটি কাজ করা বন্ধ করে দিয়েছে এবং এখন অনুসন্ধানগুলি কেস সংবেদনশীল।

    var city = "San Antonio"
    var searchString = "san "
    if(city.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
        print("San Antonio starts with san ");
    }

    var myString = "Just a string with san within it"

    if(myString.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
        print("I don't want this string to print bc myString does not start with san ");
    }

আপনি কি কংক্রিটের উদাহরণ দিতে পারেন যেখানে কেসআইনেসেটিভ অনুসন্ধানের সাথে রেঞ্জঅফ স্ট্রিং প্রত্যাশার মতো কাজ করে না? আমি এটি iOS 9 সিমুলেটারে পরীক্ষা করেছি এবং এটি আমার পক্ষে কাজ করেছে।
মার্টিন আর

উত্তর:


362

hasPrefixপরিবর্তে ব্যবহার করুন startsWith

উদাহরণ:

"hello dolly".hasPrefix("hello")  // This will return true
"hello dolly".hasPrefix("abc")    // This will return false

2
ওপি কেস সংবেদনশীল হওয়ার জন্য জিজ্ঞাসা করেছে এবং আপনার উত্তর কেস সংবেদনশীল
সিউর

13
ব্যবহার করে তুলনা করার আগে স্ট্রিংগুলি ছোট হাতের অক্ষরে তৈরি করা খুব সহজ"string".lowercased()
টোটারটোটোরো

12

এখানে শুরুগুলির সাথে একটি সুইফট এক্সটেনশন বাস্তবায়ন রয়েছে:

extension String {

  func startsWith(string: String) -> Bool {

    guard let range = rangeOfString(string, options:[.AnchoredSearch, .CaseInsensitiveSearch]) else {
      return false
    }

    return range.startIndex == startIndex
  }

}

ব্যবহারের উদাহরণ:

var str = "Hello, playground"

let matches    = str.startsWith("hello") //true
let no_matches = str.startsWith("playground") //false

10

বিশেষত ক্ষেত্রে সংবেদনশীল উপসর্গের মিলের উত্তর দিতে :

খাঁটি সুইফটে (বেশিরভাগ সময় প্রস্তাবিত)

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return lowercased().hasPrefix(prefix.lowercased())
    }
}

বা:

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return lowercased().starts(with: prefix.lowercased())
    }
}

দ্রষ্টব্য: খালি উপসর্গের জন্য ""উভয় বাস্তবায়নই ফিরে আসবেtrue

ফাউন্ডেশন ব্যবহার range(of:options:)

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return range(of: prefix, options: [.anchored, .caseInsensitive]) != nil
    }
}

দ্রষ্টব্য: খালি উপসর্গের জন্য ""এটি ফিরে আসবেfalse

এবং একটি রেজেক্সের সাথে কুরুচিপূর্ণ হচ্ছে (আমি এটি দেখেছি ...)

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        guard let expression = try? NSRegularExpression(pattern: "\(prefix)", options: [.caseInsensitive, .ignoreMetacharacters]) else {
            return false
        }
        return expression.firstMatch(in: self, options: .anchored, range: NSRange(location: 0, length: characters.count)) != nil
    }
}

দ্রষ্টব্য: খালি উপসর্গের জন্য ""এটি ফিরে আসবেfalse


6

সুইফ্ট 4 func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Elementচালু করা হবে।

উদাহরণ ব্যবহার:

let a = 1...3
let b = 1...10

print(b.starts(with: a))
// Prints "true"

6

সম্পাদনা: সুইফট 3-এর জন্য আপডেট হয়েছে।

সুইফ্ট স্ট্রিং ক্লাসে কেস-সংবেদনশীল পদ্ধতি রয়েছে hasPrefix()তবে আপনি যদি কেস-সংবেদনশীল অনুসন্ধান চান তবে আপনি এনএসএসস্ট্রিং পদ্ধতিটি ব্যবহার করতে পারেন range(of:options:)

নোট: ডিফল্টরূপে, NSString পদ্ধতি না পাওয়া যায়, কিন্তু যদি আপনি import Foundationতারা হয়।

তাই:

import Foundation
var city = "San Antonio"
var searchString = "san "
let range = city.range(of: searchString, options:.caseInsensitive)
if let range = range {
    print("San Antonio starts with san at \(range.startIndex)");
}

বিকল্প হিসাবে .caseInsensitiveবা হিসাবে দেওয়া যেতে পারে [.caseInsensitive]। আপনি যদি অতিরিক্ত বিকল্পগুলি ব্যবহার করতে চান তবে আপনি দ্বিতীয়টি ব্যবহার করবেন:

let range = city.range(of: searchString, options:[.caseInsensitive, .backwards])

এই পদ্ধতির সন্ধানের মতো অনুসন্ধানের সাথে অন্যান্য বিকল্পগুলি ব্যবহার করতে সক্ষম হওয়ার সুবিধাও রয়েছে .diacriticInsensitive. lowercased()স্ট্রিংগুলি ব্যবহার করে একই ফলাফলটি অর্জন করা যায় না ।


1

সুইফট 3 সংস্করণ:

func startsWith(string: String) -> Bool {
    guard let range = range(of: string, options:[.caseInsensitive]) else {
        return false
    }
    return range.lowerBound == startIndex
}

সঙ্গে দ্রুত হতে পারে .anchored। আমার উত্তর বা অলিভার অ্যাটকিনসনের উত্তর দেখুন।
সিউর

1

এক্সটেনশন সহ সুইফট 4 এ

আমার এক্সটেনশন-উদাহরণে 3 টি ফাংশন রয়েছে: একটি সাবস্ট্রিং দিয়ে স্ট্রিং শুরু করুন , সাবস্ট্রিংয়ের জন্য একটি স্ট্রিং শেষ করুন এবং কোনও স্ট্রিংয়ে একটি সাবস্ট্রিং রয়েছে তা পরীক্ষা করুন।

IsCaseSensitive- প্যারামিটারটিকে মিথ্যাতে সেট করুন, আপনি যদি অগ্রাহ্য করতে চান তবে "A" বা "a" অক্ষর, অন্যথায় এটি সত্য হিসাবে সেট করুন।

এটি কীভাবে কাজ করে তার আরও তথ্যের জন্য কোডটিতে মন্তব্যগুলি দেখুন।

কোড:

    import Foundation

    extension String {
        // Returns true if the String starts with a substring matching to the prefix-parameter.
        // If isCaseSensitive-parameter is true, the function returns false,
        // if you search "sA" from "San Antonio", but if the isCaseSensitive-parameter is false,
        // the function returns true, if you search "sA" from "San Antonio"

        func hasPrefixCheck(prefix: String, isCaseSensitive: Bool) -> Bool {

            if isCaseSensitive == true {
                return self.hasPrefix(prefix)
            } else {
                var thePrefix: String = prefix, theString: String = self

                while thePrefix.count != 0 {
                    if theString.count == 0 { return false }
                    if theString.lowercased().first != thePrefix.lowercased().first { return false }
                    theString = String(theString.dropFirst())
                    thePrefix = String(thePrefix.dropFirst())
                }; return true
            }
        }
        // Returns true if the String ends with a substring matching to the prefix-parameter.
        // If isCaseSensitive-parameter is true, the function returns false,
        // if you search "Nio" from "San Antonio", but if the isCaseSensitive-parameter is false,
        // the function returns true, if you search "Nio" from "San Antonio"
        func hasSuffixCheck(suffix: String, isCaseSensitive: Bool) -> Bool {

            if isCaseSensitive == true {
                return self.hasSuffix(suffix)
            } else {
                var theSuffix: String = suffix, theString: String = self

                while theSuffix.count != 0 {
                    if theString.count == 0 { return false }
                    if theString.lowercased().last != theSuffix.lowercased().last { return false }
                    theString = String(theString.dropLast())
                    theSuffix = String(theSuffix.dropLast())
                }; return true
            }
        }
        // Returns true if the String contains a substring matching to the prefix-parameter.
        // If isCaseSensitive-parameter is true, the function returns false,
        // if you search "aN" from "San Antonio", but if the isCaseSensitive-parameter is false,
        // the function returns true, if you search "aN" from "San Antonio"
        func containsSubString(theSubString: String, isCaseSensitive: Bool) -> Bool {

            if isCaseSensitive == true {
                return self.range(of: theSubString) != nil
            } else {
                return self.range(of: theSubString, options: .caseInsensitive) != nil
            }
        }
    }

কীভাবে ব্যবহার করবেন উদাহরণ:

স্ট্রিংটি "টেস্ট" দিয়ে শুরু করার জন্য পরীক্ষা করুন:

    "testString123".hasPrefixCheck(prefix: "TEST", isCaseSensitive: true) // Returns false
    "testString123".hasPrefixCheck(prefix: "TEST", isCaseSensitive: false) // Returns true

স্ট্রিংটি পরীক্ষা করার জন্য "পরীক্ষা" দিয়ে শুরু করুন:

    "testString123".hasPrefixCheck(prefix: "test", isCaseSensitive: true) // Returns true
    "testString123".hasPrefixCheck(prefix: "test", isCaseSensitive: false) // Returns true

স্ট্রিংটি "G123" দিয়ে শেষ করার জন্য পরীক্ষা করুন:

    "testString123".hasSuffixCheck(suffix: "G123", isCaseSensitive: true) // Returns false
    "testString123".hasSuffixCheck(suffix: "G123", isCaseSensitive: false) // Returns true

স্ট্রিংটি "g123" দিয়ে শেষ করার জন্য পরীক্ষা করুন:

    "testString123".hasSuffixCheck(suffix: "g123", isCaseSensitive: true) // Returns true
    "testString123".hasSuffixCheck(suffix: "g123", isCaseSensitive: false) // Returns true

চেক করার জন্য স্ট্রিংয়ে "RING12" রয়েছে:

    "testString123".containsSubString(theSubString: "RING12", isCaseSensitive: true) // Returns false
    "testString123".containsSubString(theSubString: "RING12", isCaseSensitive: false) // Returns true

স্ট্রিংয়ে "রিং 12" রয়েছে তা পরীক্ষা করার জন্য:

    "testString123".containsSubString(theSubString: "ring12", isCaseSensitive: true) // Returns true
    "testString123".containsSubString(theSubString: "ring12", isCaseSensitive: false) // Returns true
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.