文字列から最後の文字を削除します。Swift言語


241

Swiftを使用して文字列変数から最後の文字を削除するにはどうすればよいですか?ドキュメントでそれを見つけることができません。

ここに完全な例があります:

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

2
2017年、現代の回答:stackoverflow.com/a/39610807/294884
Fattie

回答:


537

Swift 4.0(またSwift 5.0)

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)

Swift 3.0

APIが少し速くなり、その結果、Foundation拡張機能が少し変更されました。

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"

Zmey、Rob Allenに感謝します。

Swift 2.0+ Way

これを行うにはいくつかの方法があります。

Swiftライブラリの一部ではありませんが、Foundation拡張機能を介して:

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"

古いString.Index(Xcode 6 Beta 4 +)方法

以来Stringスウィフト内の型が優れたUTF-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()関数を使用して、長さよりも1つ短い値を指定できますString

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

Xcode 6ベータ6の場合: 'String'には名前のメンバーがありませんsubstringToIndex
ielyamani

2
ねえ、ヘッドアップ、それsubstringToIndexはないことを確認してくださいsubstringFromIndex。それはあなたがこれをインテリジェントに間違えていると感じさせません、私に教えましょう。
Louie Bertoncin、2015

2
これは本当です、7月21日の時点で、Xcode 7 Beta 4は「String」にはという名前のメンバーがいないと言いsubstringToIndexます。また、Xcodeの7のように、文字列はもはや持って.count財産を、それは今文字のみに適用されていない:string.characters.count
kakubei

2
スウィフト3:var truncated = name.substring(to: name.index(before: name.endIndex))
Zmey

2
あなたの答えはSwiftの進化の歴史です。
DawnSong

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
スウィフト2.0ではcharacters文字列のプロパティは今、あなたが使用する必要があるので、列を出力: expression = expression.characters.dropLast()
gui_dos

5
Swift 2.0では、結果をexpression = String(expression.characters.dropLast())文字列として戻したい場合は適切にキャストする必要があります
cromanelli

69

スウィフト4:

let choppedString = String(theString.dropLast())

Swift 2では、次のようにします。

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

Swift文字列を理解するには、このリンクをお勧めします。


9

スイフト4/5

var str = "bla"
str.removeLast() // returns "a"; str is now "bl"

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))
    }
}

1.2より前のバージョンのSwiftの場合:

...
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))") // ""

参照:

拡張機能は、既存のクラス、構造、または列挙型に新しい機能を追加します。これには、元のソースコードにアクセスできないタイプを拡張する機能が含まれます(遡及モデリングと呼ばれます)。拡張機能は、Objective-Cのカテゴリに似ています。(Objective-Cカテゴリーとは異なり、Swift拡張には名前がありません。)

ドキュメントを参照


こんにちは、絵文字をテストしましたか?
ZYiOS

@ZuYuan絵文字とは何ですか?
Maxim Shoustin 2014


5

文字列の最後の文字をトリミングする最も簡単な方法は次のとおりです。

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

文字列の末尾から必要な数の文字を削除する非常にエレガントな方法でありがとうございます。
Letaief Achraf

5

スウィフト4

var welcome = "Hello World!"
welcome = String(welcome[..<welcome.index(before:welcome.endIndex)])

または

welcome.remove(at: welcome.index(before: welcome.endIndex))

または

welcome = String(welcome.dropLast())



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年4月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!"

メタ:

言語は急速な進化を続けており、以前は良好であった多くのSOの回答の半減期が危険なほど短くなっています。言語を学び、実際のドキュメントを参照することが常に最善です。


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

別の方法最後から1 つまたは複数の文字を削除する場合。

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

ここで、XXは削除する文字数です。



0

操作したい文字列にはNSStringを使用することをお勧めします。実際、それを開発者として考えるようになりました。SwiftStringが解決するNSStringの問題に遭遇したことはありません...微妙な点は理解しています。しかし、私はまだそれらを実際に必要としているわけではありません。

var foo = someSwiftString as NSString

または

var foo = "Foo" as NSString

または

var foo: NSString = "blah"

そして、単純なNSString文字列操作の世界全体があなたに開かれます。

質問への答えとして

// 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

Swift 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

Swift 4.2

また、IOSアプリで文字列から最後の文字(つまり、UILabel text)を削除します

@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

}

IOS APP StoryBoard


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.