Swift 中的字符串修剪:String 有 trim() 方法吗?

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“我的 .trim() 在哪?”—— 或者为什么 Swift 不是 Python

\n\n

如果您是从 Python 或 JavaScript 转到 Swift,那么您一定习惯了简单地调用 " hello ".trim() 或 " hello ".strip()。当您编写第一个 Swift 代码,尝试做同样的事情时,却遇到了编译错误。是不是很熟悉?

\n\n

在 Stack Overflow 上,这个问题获得了数千次浏览,这并非没有原因。在 Swift 中,字符串 没有 .trim() 方法。但这并不意味着不能修剪空格和字符。只是方法不同——更符合 Swift 的方式。让我们一劳永逸地弄清楚。

\n\n

在本文中,我们不仅会回答主要问题,还会展示 真实的代码示例,您可以立即将其插入到您的项目中。开始吧!

\n\n

简短回答:有,但不像您习惯的那样

\n\n

在 Swift 中,没有单一的 .trim() 方法。取而代之的是使用来自 Foundation 协议的一系列方法:

\n\n
    \n
  • trimmingCharacters(in:) — 主要工具
  • \n
  • .trimmingCharacters(in: .whitespacesAndNewlines) — 最常用的选项
  • \n
\n\n

听起来很简单?实际上,这提供了 灵活性:您可以自己决定要修剪哪些字符,而不是依赖内置方法的“魔法”。

\n\n

trimmingCharacters 如何工作——通过示例解析

\n\n

基本示例:删除空格和换行符

\n\n
import Foundation\n\nlet text = "   你好,Swift!   \\n"\nlet trimmed = text.trimmingCharacters(in: .whitespacesAndNewlines)\nprint(trimmed) // "你好,Swift!"
\n\n

请注意:我们 必须 导入 Foundation。没有它,该方法不可用,因为它是在 NSString 中定义的,并通过桥接“混入”到 Swift 字符串中。

\n\n

仅空格(不删除换行符)

\n\n
let textWithNewline = "  Hello\\n"\nlet onlySpacesTrimmed = textWithNewline.trimmingCharacters(in: .whitespaces)\nprint(onlySpacesTrimmed) // "Hello\\n"
\n\n

看到了吗?换行符保留了下来。当您想保留格式但去掉边缘多余的空格时,这很方便。

\n\n

修剪任意字符

\n\n

在 CharacterSet 中,您可以传递任何字符集:

\n\n
let email = "  user@example.com  "\nlet cleaned = email.trimmingCharacters(in: .whitespaces)\nprint(cleaned) // "user@example.com"\n\nlet price = "$99.99"\nlet noDollar = price.trimmingCharacters(in: CharacterSet(charactersIn: "$"))\nprint(noDollar) // "99.99"
\n\n

那 trimLeft / trimRight (ltrim / rtrim) 呢?

\n\n

在 Python 中有 .lstrip() 和 .rstrip()。在 Swift 中——没有。但这很容易手动实现。以下是两个简单的扩展,您可以添加到您的项目中:

\n\n
import Foundation\n\nextension String {\n    func trimmingLeft(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var start = startIndex\n        while start < endIndex, characterSet.contains(self[start].unicodeScalars.first!) {\n            formIndex(after: &start)\n        }\n        return String(self[start..<endIndex])\n    }\n    \n    func trimmingRight(in characterSet: CharacterSet = .whitespacesAndNewlines) -> String {\n        var end = endIndex\n        while end > startIndex, characterSet.contains(self[index(before: end)].unicodeScalars.first!) {\n            formIndex(before: &end)\n        }\n        return String(self[startIndex..<end])\n    }\n}\n\n// 使用示例:\nlet text = "   Hello World   "\nprint(text.trimmingLeft())  // "Hello World   "\nprint(text.trimmingRight()) // "   Hello World"
\n\n

现在,您拥有了像在您喜爱的 Python 中一样完整的 trimLeft 和 trimRight。将此代码保存到单独的文件中——以后会用到。

\n\n

P

博客

书籍推荐