スペースである文字列から最初の文字を削除する方法が必要です。文字列の文字を切り取るために使用できるメソッドまたはString型の拡張さえも探しています。
スペースである文字列から最初の文字を削除する方法が必要です。文字列の文字を切り取るために使用できるメソッドまたはString型の拡張さえも探しています。
回答:
先頭と末尾の空白を削除するには:
let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
Swift 3 / Swift 4:
let trimmedString = string.trimmingCharacters(in: .whitespaces)
NSCharacterSet.whitespaceAndNewlineCharacterSet()
改行文字をトリミングする場合にも使用できます。
すべての種類の空白文字を(このSO回答に基づいて)削除する場合の正しい方法は次のとおりです。
extension String {
var stringByRemovingWhitespaces: String {
let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
return components.joinWithSeparator("")
}
}
extension String {
func removingWhitespaces() -> String {
return components(separatedBy: .whitespaces).joined()
}
}
この回答は、質問がすべての空白の削除に関するものである場合に投稿されました。質問は、先頭の空白のみに言及するように編集されました。先頭の空白のみを削除する場合は、以下を使用します。
extension String {
func removingLeadingSpaces() -> String {
guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
return self
}
return String(self[index...])
}
}
この文字列拡張は、末尾の空白だけでなく、文字列からすべての空白を削除します...
extension String {
func replace(string:String, replacement:String) -> String {
return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
}
func removeWhitespace() -> String {
return self.replace(string: " ", replacement: "")
}
}
例:
let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.
スウィフト3
このメソッドを使用して、文字列内のすべての通常のスペースを削除できます(すべての種類の空白は考慮しません)。
let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")
結果は次のようになります。
HelloWorld!
正規表現を使用することもできます。
let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
Swift 3.0以降については、他の回答を参照してください。これはSwift 2.xの従来の答えです
上記のように、最初の文字を削除することに関心があるので、.stringByTrimmingCharactersInSet()インスタンスメソッドは適切に機能します。
myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
独自の文字セットを作成して、次のようにして文字列の境界をトリミングすることもできます。
myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
stringByReplacingOccurrencesOfString(target:String、replacement:String)と呼ばれる部分文字列の削除または置換を処理する組み込みのインスタンスメソッドもあります。文字列のどこかにあるスペースやその他のパターンを削除できます
オプションと範囲を指定できますが、以下は必要ありません。
myString.stringByReplacingOccurrencesOfString(" ", withString: "")
これは、文字列内の文字の繰り返しパターンを削除または置換する簡単な方法であり、連鎖させることができますが、そのたびに文字列全体をもう一度パスする必要があるため、効率が低下します。だからあなたはこれを行うことができます:
myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")
...しかし、それは2倍の時間がかかります。
Appleサイトの.stringByReplacingOccurrencesOfString()ドキュメント
これらのStringインスタンスメソッドをチェーンすると、1回限りの変換に非常に便利な場合があります。たとえば、短いNSData Blobを1行にスペースのない16進文字列に変換する場合、Swiftの組み込みのString補間といくつかのトリミングを使用してこれを行うことができます。交換:
("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")
私はこの拡張機能を使用して、他のコレクションがどのように柔軟で模倣するかを考えます。
extension String {
func filter(pred: Character -> Bool) -> String {
var res = String()
for c in self.characters {
if pred(c) {
res.append(c)
}
}
return res
}
}
"this is a String".filter { $0 != Character(" ") } // "thisisaString"
前面ではなく背面からスペースを削除したいが中央は削除したくない場合は、 stringByTrimmingCharactersInSet
let dirtyString = " First Word "
let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
文字列の任意の場所からスペースを削除する場合は、stringByReplacing ...を確認することをお勧めします。
" First Word "
出力は"First Word"
)。
あなたもこれを試すことができます
let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
誰かが文字列から余分なスペースを削除した場合、例えば= "This is the demo text remove extra space between the words."
この関数はSwift 4で使用できます。
func removeSpace(_ string: String) -> String{
var str: String = String(string[string.startIndex])
for (index,value) in string.enumerated(){
if index > 0{
let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
if value == " " && string[indexBefore] == " "{
}else{
str.append(value)
}
}
}
return str
}
そして結果は
"This is the demo text remove extra space between the words."
こんにちはこれは遅いかもしれませんが、試す価値があります。これは遊び場ファイルからのものです。文字列拡張にすることができます。
これはSwift 5.3で書かれています
方法1:
var str = "\n \tHello, playground "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
let mstr = NSMutableString(string: str)
regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
str = mstr as String
}
Result: "Hello, playground "
方法2:
if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
}
}
Result: "Hello, playground "
Swift 3バージョン
//This function trim only white space:
func trim() -> String
{
return self.trimmingCharacters(in: CharacterSet.whitespaces)
}
//This function trim whitespeaces and new line that you enter:
func trimWhiteSpaceAndNewLine() -> String
{
return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
}
let strFirstName = txtFirstName.text?.trimmingCharacters(in:
CharacterSet.whitespaces)
さらに別の答えとして、入力文字列には単語間に複数のスペースが含まれる場合があります。単語間のスペースが1つだけになるように標準化する必要がある場合は、これを試してください(Swift 4/5)
let inputString = " a very strange text ! "
let validInput = inputString.components(separatedBy:.whitespacesAndNewlines).filter { $0.count > 0 }.joined(separator: " ")
print(validInput) // "a very strange text !"
BadmintonCatの回答のSwift 3バージョン
extension String {
func replace(_ string:String, replacement:String) -> String {
return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
}
func removeWhitespace() -> String {
return self.replace(" ", replacement: "")
}
}
whitespaceCharacterSet
がベストプラクティスです。
class SpaceRemover
{
func SpaceRemover(str :String)->String
{
var array = Array(str)
var i = array.count
while(array.last == " ")
{
var array1 = [Character]()
for item in 0...i - 1
{
array1.append(array[item])
}
i = i - 1
array = array1
print(array1)
print(array)
}
var arraySecond = array
var j = arraySecond.count
while(arraySecond.first == " ")
{
var array2 = [Character]()
if j > 1
{
for item in 1..<j
{
array2.append(arraySecond[item])
}
}
j = j - 1
arraySecond = array2
print(array2)
print(arraySecond)
}
print(arraySecond)
return String(arraySecond)
}
}