স্ট্রিং থেকে শেষ চরিত্রটি সরান। দ্রুত ভাষা


242

আমি কীভাবে সুইফট ব্যবহার করে স্ট্রিং ভেরিয়েবল থেকে শেষ চরিত্রটি সরিয়ে ফেলতে পারি? ডকুমেন্টেশনে এটি খুঁজে পাচ্ছি না।

এখানে সম্পূর্ণ উদাহরণ:

var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)

2
2017, আধুনিক উত্তর: stackoverflow.com/a/39610807/294884
Fattie

উত্তর:


538

সুইফট ৪.০ (সুইফট ৫.০)

var str = "Hello, World"                           // "Hello, World"
str.dropLast()                                     // "Hello, Worl" (non-modifying)
str                                                // "Hello, World"
String(str.dropLast())                             // "Hello, Worl"

str.remove(at: str.index(before: str.endIndex))    // "d"
str                                                // "Hello, Worl" (modifying)

সুইফট 3.0

এপিআইগুলি আরও কিছুটা দ্রুতগতি অর্জন করেছে এবং ফলস্বরূপ ফাউন্ডেশনের এক্সটেনশনটি কিছুটা পরিবর্তিত হয়েছে:

var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

বা স্থানস্থ সংস্করণ:

var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name)      // "Dolphi"

ধন্যবাদ জেমি, রব অ্যালেন!

সুইফট 2.0+ ওয়ে

এটি সম্পাদন করার কয়েকটি উপায় রয়েছে:

সুইফট লাইব্রেরির অংশ না হয়েও ফাউন্ডেশনের সম্প্রসারণের মাধ্যমে:

var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

removeRange()পদ্ধতিটি (যা পরিবর্তিত হয় name) ব্যবহার করে :

var name: String = "Dolphin"    
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"

dropLast()ফাংশন ব্যবহার :

var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name)      // "Dolphin"
print(truncated) // "Dolphi"

ওল্ড স্ট্রিং.ইনডেক্স (এক্সকোড 6 বিটা 4 +) ওয়ে

যেহেতু Stringসুইফটে টাইপগুলি সর্বোত্তম ইউটিএফ -8 সমর্থন সরবরাহ করে, তাই আপনি আর Intপ্রকারগুলি ব্যবহার করে অক্ষর সূচক / রেঞ্জ / সাবস্ট্রিংগুলি অ্যাক্সেস করতে পারবেন না । পরিবর্তে, আপনি ব্যবহার String.Index:

let name: String = "Dolphin"
let stringLength = count(name) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - 1
name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"

বিকল্পভাবে (আরও ব্যবহারিক, তবে কম শিক্ষামূলক উদাহরণের জন্য) আপনি ব্যবহার করতে পারেন endIndex:

let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"

নোট: আমি দেখেছি এই বোঝার জন্য একটি দুর্দান্ত আদ্যস্থল হতেString.Index

পুরাতন (প্রাক-বিটা 4) উপায়

substringToIndex()দৈর্ঘ্যের চেয়ে কম প্রদান করে আপনি কেবল ফাংশনটি ব্যবহার করতে পারেন String:

let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"

এক্সকোড 6 বিটা 6 তে: ' substringToIndex
স্ট্রিং'-এর

2
আরে, মাথা আপ, বিষয়ে নিশ্চিত substringToIndexনা substringFromIndex। এটি আপনাকে বুদ্ধিমান ভুল বুঝতে অনুভব করে না, আমি আপনাকে বলি।
লুই বার্টনসিন

2
এটি সত্য, 21 শে জুলাই, এক্সকোড 7 বিটা 4 বলেছেন 'স্ট্রিং'-এর কোনও সদস্যের নাম নেই substringToIndex। এছাড়াও, এক্সকোড of হিসাবে স্ট্রিংয়ের আর কোনও .countসম্পত্তি নেই, এটি এখন কেবল অক্ষরগুলিতে প্রয়োগ করা হয়:string.characters.count
কাকুবেই

2
সুইফট 3:var truncated = name.substring(to: name.index(before: name.endIndex))
জেমে

2
আপনার উত্তরটি দ্রুতগতির বিবর্তনের ইতিহাস।
ডনসং

89

গ্লোবাল dropLast()ফাংশন ক্রমগুলি এবং সেইজন্য স্ট্রিংগুলিতে কাজ করে:

var expression  = "45+22"
expression = dropLast(expression)  // "45+2"

// in Swift 2.0 (according to cromanelli's comment below)
expression = String(expression.characters.dropLast())

3
সুইফট ২.০ এ charactersexpression = expression.characters.dropLast()
স্ট্রিংয়ের

5
সুইফট ২.০-তে ফলাফলটি expression = String(expression.characters.dropLast())স্ট্রিং হিসাবে ফিরে পেতে চাইলে সঠিকভাবে ফলাফল দিতে হবে
ক্রোমেনেলি

69

সুইফট 4:

let choppedString = String(theString.dropLast())

সুইফট 2-এ, এটি করুন:

let choppedString = String(theString.characters.dropLast())

আমি এই লিঙ্কটি সুইফ্ট স্ট্রিংগুলির বোঝার জন্য প্রস্তাব দিই ।



8

এটি একটি স্ট্রিং এক্সটেনশন ফর্ম:

extension String {

    func removeCharsFromEnd(count_:Int) -> String {
        let stringLength = count(self)

        let substringIndex = (stringLength < count_) ? 0 : stringLength - count_

        return self.substringToIndex(advance(self.startIndex, substringIndex))
    }
}

১.২ এর আগে সুইফ্টের সংস্করণগুলির জন্য:

...
let stringLength = countElements(self)
...

ব্যবহার:

var str_1 = "Maxim"
println("output: \(str_1.removeCharsFromEnd(1))") // "Maxi"
println("output: \(str_1.removeCharsFromEnd(3))") // "Ma"
println("output: \(str_1.removeCharsFromEnd(8))") // ""

রেফারেন্স:

এক্সটেনশনগুলি বিদ্যমান শ্রেণি, কাঠামো বা গণনার ধরণের ক্ষেত্রে নতুন কার্যকারিতা যুক্ত করে। এর মধ্যে এমন প্রকারগুলি প্রসারিত করার ক্ষমতা অন্তর্ভুক্ত রয়েছে যার জন্য আপনার মূল উত্স কোডটিতে অ্যাক্সেস নেই (retroactive মডেলিং হিসাবে পরিচিত)। এক্সটেনশনগুলি উদ্দেশ্য-সি এর বিভাগগুলির মতো। (অবজেক্টিভ-সি বিভাগগুলির মতো, সুইফট এক্সটেনশনের নাম নেই not)

ডকস দেখুন


হাই, আপনি ইমোজিস পরীক্ষা করেছেন?
ZYiOS

@ জুইয়ান ইমোজিস কি?
ম্যাক্সিম শৌস্টিন


5

স্ট্রিংয়ের শেষ চরিত্রটি ছাঁটাই করার সহজ উপায়:

title = title[title.startIndex ..< title.endIndex.advancedBy(-1)]

আপনাকে ধন্যবাদ, একটি স্ট্রিংয়ের শেষে থেকে যতগুলি অক্ষর আপনি চান মুছে ফেলার একটি খুব মার্জিত উপায়।
লেটাফ আছরাফ



2
var str = "Hello, playground"

extension String {
    var stringByDeletingLastCharacter: String {
        return dropLast(self)
    }
}

println(str.stringByDeletingLastCharacter)   // "Hello, playgroun"

kkkk আমি এটির একটিও মনে করি নি (উপরে উপরে সুইফট 1.2)। সুইফট 3 সংস্করণের জন্য stackoverflow.com/a/40028338/2303865
লিও Dabus

2

পরিবর্তনকারী একটি সুইফ্ট বিভাগ:

extension String {
    mutating func removeCharsFromEnd(removeCount:Int)
    {
        let stringLength = count(self)
        let substringIndex = max(0, stringLength - removeCount)
        self = self.substringToIndex(advance(self.startIndex, substringIndex))
    }
}

ব্যবহার করুন:

var myString = "abcd"
myString.removeCharsFromEnd(2)
println(myString) // "ab"

2

সংক্ষিপ্ত উত্তর (2015-04-16 হিসাবে বৈধ): removeAtIndex(myString.endIndex.predecessor())

উদাহরণ:

var howToBeHappy = "Practice compassion, attention and gratitude. And smile!!"
howToBeHappy.removeAtIndex(howToBeHappy.endIndex.predecessor())
println(howToBeHappy)
// "Practice compassion, attention and gratitude. And smile!"

meta:

ভাষাটি তার দ্রুত বিবর্তন অব্যাহত রেখেছে, অনেক পূর্বের ভাল এসও উত্তরগুলির জন্য অর্ধ জীবন বিপজ্জনকভাবে সংক্ষিপ্ত করে তুলেছে। ভাষা শেখা এবং আসল ডকুমেন্টেশনগুলি উল্লেখ করা সর্বদা সেরা ।


2

নতুন সাবস্ট্রিং ধরণের ব্যবহারের সাথে:

সুইফট 4:

var before: String = "Hello world!"
var lastCharIndex: Int = before.endIndex
var after:String = String(before[..<lastCharIndex])
print(after) // Hello world

খাটো উপায়:

var before: String = "Hello world!"
after = String(before[..<before.endIndex])
print(after) // Hello world

1

ফাংশনটি ব্যবহার করুন advance(startIndex, endIndex):

var str = "45+22"
str = str.substringToIndex(advance(str.startIndex, countElements(str) - 1))

1

অন্য উপায় আপনি যদি শেষ থেকে এক বা একাধিক অক্ষর মুছতে চান ।

var myStr = "Hello World!"
myStr = (myStr as NSString).substringToIndex((myStr as NSString).length-XX)

যেখানে XX মুছে ফেলাতে চান এমন অক্ষরের সংখ্যা।


1

সুইফ্ট 3 ( ডক্স অনুসারে ) 20 নভেম্বর 2016

let range = expression.index(expression.endIndex, offsetBy: -numberOfCharactersToRemove)..<expression.endIndex
expression.removeSubrange(range)

0

আপনি যে স্ট্রিংগুলি ব্যবহার করতে চান তার জন্য আমি এনএসএসস্ট্রিং ব্যবহার করার পরামর্শ দেব। আসলে এটিকে একজন বিকাশকারী হিসাবে ভাবতে আসুন আমি কখনই এনএসএসস্ট্রিংয়ের সাথে এমন কোনও সমস্যায় পড়িনি যা সুইফট স্ট্রিং সমাধান করবে ... আমি সূক্ষ্মতাগুলি বুঝতে পারি। তবে তাদের এখনও সত্যিকারের প্রয়োজন নেই।

var foo = someSwiftString as NSString

অথবা

var foo = "Foo" as NSString

অথবা

var foo: NSString = "blah"

এবং তারপরে সাধারণ এনএসএসস্ট্রিং স্ট্রিং অপারেশনগুলির পুরো বিশ্বটি আপনার জন্য উন্মুক্ত।

প্রশ্নের উত্তর হিসাবে

// check bounds before you do this, e.g. foo.length > 0
// Note shortFoo is of type NSString
var shortFoo = foo.substringToIndex(foo.length-1)

0

dropLast()ফাংশন স্ট্রিং এর শেষ উপাদান সরিয়ে ফেলা হয়।

var expression = "45+22"
expression = expression.dropLast()

0

সুইফট 3 : আপনি যখন পেছনের স্ট্রিংটি সরাতে চান:

func replaceSuffix(_ suffix: String, replacement: String) -> String {
    if hasSuffix(suffix) {
        let sufsize = suffix.count < count ? -suffix.count : 0
        let toIndex = index(endIndex, offsetBy: sufsize)
        return substring(to: toIndex) + replacement
    }
    else
    {
        return self
    }
}

0

সুইফট 4.2

আমি আইওএস অ্যাপ্লিকেশনটিতে স্ট্রিং (অর্থাত্ ইউআইএলবেল পাঠ্য ) থেকে আমার শেষ চরিত্রটিও মুছুন

@IBOutlet weak var labelText: UILabel! // Do Connection with UILabel

@IBAction func whenXButtonPress(_ sender: UIButton) { // Do Connection With X Button

    labelText.text = String((labelText.text?.dropLast())!) // Delete the last caracter and assign it

}

আইওএস অ্যাপের স্টোরিবোর্ড


0
import UIKit

var str1 = "Hello, playground"
str1.removeLast()
print(str1)

var str2 = "Hello, playground"
str2.removeLast(3)
print(str2)

var str3 = "Hello, playground"
str3.removeFirst(2)
print(str3)

Output:-
Hello, playgroun
Hello, playgro
llo, playground

0

উপরের কোডটির প্রশংসামূলক আমি স্ট্রিংয়ের শুরুটি সরাতে চেয়েছিলাম এবং কোথাও কোনও রেফারেন্স খুঁজে পাইনি। আমি এটি কীভাবে করেছি তা এখানে:

var mac = peripheral.identifier.description
let range = mac.startIndex..<mac.endIndex.advancedBy(-50)
mac.removeRange(range)  // trim 17 characters from the beginning
let txPower = peripheral.advertisements.txPower?.description

এটি স্ট্রিংয়ের শুরু থেকে 17 টি অক্ষর ছাঁটাই করে দেয় (তার মোট স্ট্রিংয়ের দৈর্ঘ্য 67 টি শেষ থেকে আমরা অগ্রিম -50 এবং সেখানে আপনার এটি রয়েছে।

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