去掉字符串开头和结尾的空格

4
我有一个问题,需要移除字符串开始和结尾的空格。例如,我有一个字符串:
\r\n\t- 有人会来这里吗?\n- 我不确定...\r\n\r\n
我需要仅移除开头和结尾的空格(字符串应该看起来像这样:- 有人会来这里吗?\n- 我不确定...)。同时,可能会有很多种字符串结尾的变体,如"\r\n\r\n"、"\r\n"、"\n\r\n"等。
谢谢。

可能是Does swift has trim method on String?的重复问题。 - Eric Aya
10个回答

21

您的字符串不仅包含空格,还包含换行符。

使用whitespaceAndNewlineCharacterSet作为参数调用stringByTrimmingCharactersInSet方法。

let string = "\r\n\t- Someone will come here?\n- I don't know for sure...\r\n\r\n"
let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

在Swift 3中,它更加“整洁”:
let trimmedString = string.trimmingCharacters(in: .whitespacesAndNewlines)

好的,目前这个例子可以运行,我会尝试使用其他数据。谢谢。 - Denis Rumiantsev
谢谢!太简单了! :) - Swifty Codes

6

Swift 4+ 中去除字符串的前后空格和换行符

"  2 space  ".trimmingCharacters(in: .whitespacesAndNewlines)

结果:

"2个空格"


3
//here i have used regular expression and replaced white spaces at the start and end
      let stringPassing : NSString? = "hdfjkhsdj hfjksdhf sdf "
      do {
        print("old->\(stringPassing)")
        let pattern : String = "(^\\s+)|(\\s+)$"
        let regex = try NSRegularExpression(pattern: pattern , options: [])
        let newMatched = regex.matchesInString(stringPassing! as String, options: [], range: NSMakeRange(0,stringPassing!.length))
        if(newMatched.count > 0){

          let modifiedString = regex.stringByReplacingMatchesInString(stringPassing! as String, options: [] , range: NSMakeRange(0,stringPassing!.length), withTemplate: "")
              print("new->\(modifiedString)")
        }

    } catch let error as NSError {
        print(error.localizedDescription)
    }

2
您可以使用此扩展程序并调用“yourString”。.trim()
extension String
{
    func trim() -> String
    {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }
}

1
如果您想从字符串开头移除空格,请尝试此代码。
func removeSpace()->String{
    let txt = myString
    var count:Int! = 0
    for i in txt{
        if i  == " "{
            count += 1
        }else{
            if count != 0{
                return String(txt.dropFirst(count))
            }else{
                return txt
            }
        }
    }
    return ""
}

`


1
从字符串开头删除所有的空格。
func removeWhiteSpaces(str:String) -> String{
    var newStr = str
    for i in 0..<str.count{
        let index = str.index(str.startIndex, offsetBy: i)
        print(str[index])
        if str[index] != " "{
            return newStr
        }
        else{
            newStr.remove(at: newStr.startIndex)
        }
    }
    return newStr
}

-1
在这段代码中限制文本框前面的空格。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if (textField.text?.count)! == 0 && string == " " {
            return false
        }
        else{
            return true
        }
    }

-1
在 Swift 4 中,可以在任何 String 类型的变量上使用它。
extension String {
    func trimWhiteSpaces() -> String {
        let whiteSpaceSet = NSCharacterSet.whitespaces
        return self.trimmingCharacters(in: whiteSpaceSet)
    }
}

然后像这样调用它

yourString.trimWhiteSpaces()

-2
你可以先从开头删除,然后再从结尾删除,就像这样:
while true {
if sentence.characters.first == "\r\n" || sentence.characters.first == "\n" {
    sentence.removeAtIndex(sentence.startIndex)
} else {
    break
}
}

while true {
if sentence.characters.last == "\r\n" || sentence.characters.last == "\n" {
    sentence.removeAtIndex(sentence.endIndex.predecessor())
} else {
    break
}
}

1
我敢打赌,使用while-true循环来解决这个问题并不是一个好主意。顺便说一下,字符串的结尾/开头可能是不同的。有很多情况需要考虑,把它们全部写下来也不是一个好主意,我认为。 - Denis Rumiantsev
一旦所有空格都被移除(包括任何组合的 \n 和 \r\n),它就会跳出循环。它总是仅修剪开头和结尾的空格(和换行符)。在对其进行反对之前,您至少应该尝试一下。 - Alexander Li

-2

let string = " exam ple "

let trimmed = string.replacingOccurrences(of: "(^\\s+)|(\\s+$)", with: "", options: .regularExpression)

print(">" + trimmed3 + "<")

// 输出 >exam ple<


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接