আমি সুইফট 4-এ স্ট্রিং স্লাইসিং সাবস্ক্রিপ্টগুলি কীভাবে ব্যবহার করতে পারি?


294

আমি সুইফট 3 এ নিম্নলিখিত সাধারণ কোডটি লিখেছি:

let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)

এক্সকোড 9 বিটা 5 থেকে আমি নিম্নলিখিত সতর্কতাটি পেয়েছি:

' substring(to:)' অবমূল্যায়ন করা হয়েছে: দয়া করে String'অপারেটর থেকে আংশিক ব্যাপ্তি' দিয়ে স্লাইসিং সাবস্ক্রিপ্ট ব্যবহার করুন ।

আংশিক পরিসরের এই কাটা সাবস্ক্রিপ্টটি কীভাবে সুইফট 4-এ ব্যবহৃত হতে পারে?


var str = "হ্যালো, খেলার মাঠ" ইন্ডেক্সটকাট = str.firstIndex (এর: ",") মুদ্রণ করুন (স্ট্রিং (str [.. <indexcut!])) মুদ্রণ করুন (স্ট্রিং (str [indexcut! ...]))
ব্যবহারকারী 1828845

উত্তর:


375

আপনার একপাশে খালি রাখা উচিত , তাই নাম "আংশিক পরিসর"।

let newStr = str[..<index]

অপারেটরদের কাছ থেকে আংশিক পরিসীমা একই , অন্যদিকে খালি ছেড়ে দিন:

let newStr = str[index...]

মনে রাখবেন যে এই ব্যাপ্তি অপারেটররা a Substring। আপনি যদি এটিকে স্ট্রিংয়ে রূপান্তর করতে চান তবে Stringএর সূচনা ফাংশনটি ব্যবহার করুন :

let newStr = String(str[..<index])

আপনি এখানে নতুন সাবস্ট্রিংগুলি সম্পর্কে আরও পড়তে পারেন ।


8
str[..<index]ফেরত a Substring। আপনি যদি চান newStrএকটি হতে Stringআপনি লিখতে আছে:let newStr = "\(str[..<index])"
Lindemann

12
একটি নির্জন সাথে STRING ক্ষেপক ব্যবহার Substringসম্ভবত সামান্য, বিভ্রান্তিকর যেহেতু আপনি কি সত্যিই সাধন করার চেষ্টা করছেন হয় Stringআরম্ভের: let newStr = String(str[..<index])
গ্যারি

5
কোডটি আপডেট করা যেখানে আমার 'সূচক' মানটি কেবল একটি পূর্ণসংখ্যা ছিল ত্রুটি বার্তা দেয় Cannot subscript a value of type 'String' with an index of type 'PartialRangeUpTo<Int>'। সেখানে কী ধরণের মান ব্যবহার করতে হবে?
ConfusionTowers

22
@ কনফিউশনটিয়ার্স, সুইফ্ট স্ট্রিং সূচকগুলি পূর্ণসংখ্যার নয় এবং এটি সংস্করণ ৪ দিয়ে পরিবর্তিত হয়নি You আপনার সম্ভবত সম্ভবত প্রয়োজন হবে str[..<str.index(str.startIndex, offsetBy: 8)]বা এর মতো কিছু। মনে রাখবেন যে রাখুন str.indexএকটি হল রৈখিক সময় এর ফাংশন মধ্যে অপারেশন offsetBy
zneak

6
@ জেনাক আপনি সম্ভবত চানstr.prefix(8)
টিম ভার্মিউলেন

264

স্ট্রিং স্লাইসিং (সুইফট 4) এ সাবস্ট্রিং (সুইফট 3) রূপান্তর করুন

সুইফ্ট 3, 4-তে উদাহরণ:

let newStr = str.substring(to: index) // Swift 3
let newStr = String(str[..<index]) // Swift 4

let newStr = str.substring(from: index) // Swift 3
let newStr = String(str[index...]) // Swift 4 

let range = firstIndex..<secondIndex // If you have a range
let newStr = = str.substring(with: range) // Swift 3
let newStr = String(str[range])  // Swift 4

5
পারফেক্টো, এবং পাশাপাশি 3 এবং 4 উদাহরণ দেওয়ার জন্য ধন্যবাদ, আমার প্রকল্পের উপায় আপডেট করা সহজ করে তোলে!
ইথান পার্কার

86

সুইফট 5, 4

ব্যবহার

let text = "Hello world"
text[0] // H
text[...3] // "Hell"
text[6..<text.count] // world
text[NSRange(location: 6, length: 3)] // wor

কোড

import Foundation

public extension String {
  subscript(value: Int) -> Character {
    self[index(at: value)]
  }
}

public extension String {
  subscript(value: NSRange) -> Substring {
    self[value.lowerBound..<value.upperBound]
  }
}

public extension String {
  subscript(value: CountableClosedRange<Int>) -> Substring {
    self[index(at: value.lowerBound)...index(at: value.upperBound)]
  }

  subscript(value: CountableRange<Int>) -> Substring {
    self[index(at: value.lowerBound)..<index(at: value.upperBound)]
  }

  subscript(value: PartialRangeUpTo<Int>) -> Substring {
    self[..<index(at: value.upperBound)]
  }

  subscript(value: PartialRangeThrough<Int>) -> Substring {
    self[...index(at: value.upperBound)]
  }

  subscript(value: PartialRangeFrom<Int>) -> Substring {
    self[index(at: value.lowerBound)...]
  }
}

private extension String {
  func index(at offset: Int) -> String.Index {
    index(startIndex, offsetBy: offset)
  }
}

14
এই কার্যকারিতা ডিফল্ট দ্রুত আচরণ করা উচিত।
লাইমিস

4
অবশ্যই এটিকে সুইফ্ট
লিবিতে

2
এটি সুইফটের কুৎসিত অংশের একটি স্থির।
দিমিত্রি

@ দিমিত্রি কারও পছন্দ হয়নি, কারণ এই উত্তরটিতে -2 রয়েছে। : ডি
ডিম্পিয়াक्स

সাবস্ক্রিপ্ট অপারেটর সূচক-ফাংশনটির ও (এন) জটিলতাটি গোপন করার কারণে এটি একটি খারাপ উত্তর। একটি ভাল প্রোগ্রামিং এপিআই দ্রুত অনুসন্ধানকে বোঝাতে কেবল সাবস্ক্রিপ্ট ব্যবহার করে।
ragnarius

38

সুইফ্ট 4/5-এ ছোট

var string = "123456"
string = String(string.prefix(3)) //"123"
string = String(string.suffix(3)) //"456"

26

আপনার কোডটি সুইফট 4 এ রূপান্তরকরণও এইভাবে করা যেতে পারে:

let str = "Hello, playground"
let index = str.index(of: ",")!
let substr = str.prefix(upTo: index)

নতুন স্ট্রিং রাখতে আপনি নীচের কোডটি ব্যবহার করতে পারেন:

let newString = String(str.prefix(upTo: index))

17

সাবস্ট্রিং (সূচক: সূচক) থেকে রূপান্তরিত [সূচী ...]

নমুনা পরীক্ষা করুন

let text = "1234567890"
let index = text.index(text.startIndex, offsetBy: 3)

text.substring(from: index) // "4567890"   [Swift 3]
String(text[index...])      // "4567890"   [Swift 4]

1
অক্ষরগুলি সুইফট 4
অবহেলা

এটি আমাকে সাহায্য করেছিল। tnx
user1105951

17

Swift5

(জাভা এর স্ট্রিং পদ্ধতি):

extension String {
    func subString(from: Int, to: Int) -> String {
       let startIndex = self.index(self.startIndex, offsetBy: from)
       let endIndex = self.index(self.startIndex, offsetBy: to)
       return String(self[startIndex...endIndex])
    }
}

ব্যবহার:

var str = "Hello, Nick Michaels"
print(str.subString(from:7,to:20))
// print Nick Michaels

2
এখনও সুইফট 5. কাজ করে আমি একটি জাভা শৈলী সাবস্ট্রিং জন্য (খুঁজছেন ছিল fromথেকে to-1, যেমন "Hello".substring(1,4)আয় "ইএলএল")। একটি ছোট পরিমার্জনের সাথে ( startIndex..<endIndex) এটি এখন পর্যন্ত আমি খুঁজে পেয়েছি সেরা সমাধান যা ঠিক কয়েকটি লাইনের কোডের সাথে এটি করে।
নেফ

9

কিছু কার্যকর এক্সটেনশন:

extension String {
    func substring(from: Int, to: Int) -> String {
        let start = index(startIndex, offsetBy: from)
        let end = index(start, offsetBy: to - from)
        return String(self[start ..< end])
    }

    func substring(range: NSRange) -> String {
        return substring(from: range.lowerBound, to: range.upperBound)
    }
}

আকর্ষণীয়, আমি একই চিন্তা ছিল। স্ট্রিং (লাইন ["HTTP: //" .endIndex ...]) অবহিত সাবস্ট্রিংয়ের চেয়ে কি পরিষ্কার? line.substring (থেকে: "HTTP: //" .endIndex) সম্ভবত অবধি আশ্চর্যজনক স্ট্রিং হ্যান্ডলিংয়ের লক্ষ্যযুক্ত লক্ষ্য না পাওয়া পর্যন্ত তাদের সাবস্ট্রিং অবমূল্যায়ন করা উচিত নয়।
22:53

7

uppercasedFirstCharacterসুইফট 3 এবং সুইফট 4-তে সুবিধাবঞ্চিত সংখ্যার উদাহরণ ।

সম্পত্তি uppercasedFirstCharacterNewসুইফট 4-এ স্ট্রিং স্লাইসিং সাবস্ক্রিপ্ট কীভাবে ব্যবহার করবেন তা প্রদর্শন করে।

extension String {

   public var uppercasedFirstCharacterOld: String {
      if characters.count > 0 {
         let splitIndex = index(after: startIndex)
         let firstCharacter = substring(to: splitIndex).uppercased()
         let sentence = substring(from: splitIndex)
         return firstCharacter + sentence
      } else {
         return self
      }
   }

   public var uppercasedFirstCharacterNew: String {
      if characters.count > 0 {
         let splitIndex = index(after: startIndex)
         let firstCharacter = self[..<splitIndex].uppercased()
         let sentence = self[splitIndex...]
         return firstCharacter + sentence
      } else {
         return self
      }
   }
}

let lorem = "lorem".uppercasedFirstCharacterOld
print(lorem) // Prints "Lorem"

let ipsum = "ipsum".uppercasedFirstCharacterNew
print(ipsum) // Prints "Ipsum"

1
যদি আপনি সাবস্ট্রিং বলতে চান (সাথে: রেঞ্জ) -> স্ব [রেঞ্জ]
আর্সেন ভার্টবারনভ

6

আপনি নীচের মত ক্লাস স্ট্রিংয়ের এক্সটেনশন ব্যবহার করে আপনার কাস্টম সাবস্ট্রিং পদ্ধতি তৈরি করতে পারেন:

extension String {
    func subString(startIndex: Int, endIndex: Int) -> String {
        let end = (endIndex - self.count) + 1
        let indexStartOfText = self.index(self.startIndex, offsetBy: startIndex)
        let indexEndOfText = self.index(self.endIndex, offsetBy: end)
        let substring = self[indexStartOfText..<indexEndOfText]
        return String(substring)
    }
}

যদি এটি একটি এন্ডআইডেক্সে নিতে চলেছে, তবে পাশাপাশি সীমা ছাড়িয়েও পরিচালনা করতে সক্ষম হওয়া দরকার।
জে

5

সুইফট 4 ব্যবহার করে স্ট্রিং থেকে সাবস্ট্রিং (উপসর্গ এবং প্রত্যয়) তৈরি করা হচ্ছে:

let str : String = "ilike"
for i in 0...str.count {
    let index = str.index(str.startIndex, offsetBy: i) // String.Index
    let prefix = str[..<index] // String.SubSequence
    let suffix = str[index...] // String.SubSequence
    print("prefix \(prefix), suffix : \(suffix)")
}

আউটপুট

prefix , suffix : ilike
prefix i, suffix : like
prefix il, suffix : ike
prefix ili, suffix : ke
prefix ilik, suffix : e
prefix ilike, suffix : 

আপনি যদি 2 টি সূচকের মধ্যে একটি স্ট্রিং তৈরি করতে চান তবে ব্যবহার করুন:

let substring1 = string[startIndex...endIndex] // including endIndex
let subString2 = string[startIndex..<endIndex] // excluding endIndex

প্রিফিক্স = টিআরআর [... <index>] টিআর এর পরিবর্তে [.. <index>] একক বিন্দু অনুপস্থিত।
আবুতারেক

@ আবুতারেক, আপনি কার কথা বলছেন? উপসর্গ = str [.. <সূচী], এটি নিখুঁত। (উপসর্গের স্ট্রিং)। আরও প্রসঙ্গ পেতে খেলার মাঠে চেষ্টা করুন।
আশিস লাহা

4

আমি 'স্ট্রিং: সাবস্ট্রিং:' প্রতিস্থাপনের জন্য একটি স্ট্রিং এক্সটেনশন লিখেছি

extension String {

    func sliceByCharacter(from: Character, to: Character) -> String? {
        let fromIndex = self.index(self.index(of: from)!, offsetBy: 1)
        let toIndex = self.index(self.index(of: to)!, offsetBy: -1)
        return String(self[fromIndex...toIndex])
    }

    func sliceByString(from:String, to:String) -> String? {
        //From - startIndex
        var range = self.range(of: from)
        let subString = String(self[range!.upperBound...])

        //To - endIndex
        range = subString.range(of: to)
        return String(subString[..<range!.lowerBound])
    }

}

ব্যবহার: "Date(1511508780012+0530)".sliceByString(from: "(", to: "+")

উদাহরণ ফলাফল : "1511508780012"

পিএস: বিকল্পগুলি আন-মোড়ক করতে বাধ্য হয়। প্রয়োজনীয় যেখানেই সুরক্ষা চেক টাইপ করুন।


সাবধানতা: বিকল্পগুলি আন-মোড়ক করতে বাধ্য করা হয়। প্রয়োজনে দয়া করে সুরক্ষা চেক টাইপ করুন।
জীবন

3

প্রোগ্রামিং করার সময় আমার প্রায়শই কেবল সরল এ-জা-জেড এবং 0-9 দিয়ে স্ট্রিং থাকে। শক্ত সূচক ক্রিয়াকলাপের প্রয়োজন নেই। এই এক্সটেনশনটি সরল পুরানো বাম / মাঝ / ডান ফাংশনগুলির উপর ভিত্তি করে।

extension String {

    // LEFT
    // Returns the specified number of chars from the left of the string
    // let str = "Hello"
    // print(str.left(3))         // Hel
    func left(_ to: Int) -> String {
        return "\(self[..<self.index(startIndex, offsetBy: to)])"
    }

    // RIGHT
    // Returns the specified number of chars from the right of the string
    // let str = "Hello"
    // print(str.left(3))         // llo
    func right(_ from: Int) -> String {
        return "\(self[self.index(startIndex, offsetBy: self.length-from)...])"
    }

    // MID
    // Returns the specified number of chars from the startpoint of the string
    // let str = "Hello"
    // print(str.left(2,amount: 2))         // ll
    func mid(_ from: Int, amount: Int) -> String {
        let x = "\(self[self.index(startIndex, offsetBy: from)...])"
        return x.left(amount)
    }
}

ভালো বুদ্ধি!! দুঃখজনক হলেও যে সুইফট-বৈশিষ্ট্যগুলি বিমূর্ত করার প্রয়োজন আছে কেবল কারণ তারা কীভাবে কাজ করে তা নিয়মিত পরিবর্তন করে চলেছে। অনুমান করুন তারা চান যে আমরা সকলেই উত্পাদনশীলতার পরিবর্তে নির্মাণে মনোনিবেশ করব। যাইহোক, আমি আপনার জরিমানা কোডটিতে
ফ্রেড্রিক জোহানসন

2

এই পদ্ধতির সাহায্যে আপনি স্ট্রিংয়ের নির্দিষ্ট পরিসীমা পেতে পারেন start আপনাকে সূচনা সূচকটি পাস করতে হবে এবং আপনি চান এমন মোট অক্ষরের পরে।

extension String{
    func substring(fromIndex : Int,count : Int) -> String{
        let startIndex = self.index(self.startIndex, offsetBy: fromIndex)
        let endIndex = self.index(self.startIndex, offsetBy: fromIndex + count)
        let range = startIndex..<endIndex
        return String(self[range])
    }
}

2

এটি আমার সমাধান, কোনও সতর্কতা নেই, কোনও ত্রুটি নেই তবে নিখুঁত

let redStr: String = String(trimmStr[String.Index.init(encodedOffset: 0)..<String.Index.init(encodedOffset: 2)])
let greenStr: String = String(trimmStr[String.Index.init(encodedOffset: 3)..<String.Index.init(encodedOffset: 4)])
let blueStr: String = String(trimmStr[String.Index.init(encodedOffset: 5)..<String.Index.init(encodedOffset: 6)])


1

আশা করি এটি আরও কিছুটা সহায়তা করবে: -

var string = "123456789"

আপনি যদি কিছু নির্দিষ্ট সূচকের পরে একটি সাবস্ট্রিং চান।

var indexStart  =  string.index(after: string.startIndex )// you can use any index in place of startIndex
var strIndexStart   = String (string[indexStart...])//23456789

আপনি যদি শেষে কিছু স্ট্রিং অপসারণের পরে একটি সাবস্ট্রিং চান।

var indexEnd  =  string.index(before: string.endIndex)
var strIndexEnd   = String (string[..<indexEnd])//12345678

আপনি নিম্নলিখিত কোড সহ সূচীও তৈরি করতে পারেন: -

var  indexWithOffset =  string.index(string.startIndex, offsetBy: 4)

0

আশা করি এটি সহায়ক হবে।

extension String {
    func getSubString(_ char: Character) -> String {
        var subString = ""
        for eachChar in self {
            if eachChar == char {
                return subString
            } else {
                subString += String(eachChar)
            }
        }
        return subString
    }
}


let str: String = "Hello, playground"
print(str.getSubString(","))

0
var str = "Hello, playground"
let indexcut = str.firstIndex(of: ",")
print(String(str[..<indexcut!]))
print(String(str[indexcut!...]))

আপনি এইভাবে চেষ্টা করতে পারেন এবং সঠিক ফলাফল পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.