如何删除 NSString 右端的空格?

2024-01-10

这会删除字符串两端的空格:

NSString *newString = [oldString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

如何删除字符串右端的空格?

更新:代码来自接受的答案 https://stackoverflow.com/questions/5689288/how-to-remove-whitespace-from-right-end-of-nsstring/5691567#5691567现在是的一部分SS工具包 https://github.com/samsoffes/sstoolkit/blob/master/SSToolkit/NSString+SSToolkitAdditions.m#L288-318. Yay!


UPDATE:快速基准测试表明马特自己的改编 https://stackoverflow.com/questions/5689288/how-to-remove-whitespace-from-right-end-of-nsstring/5691567#5691567, 基于Max' https://stackoverflow.com/questions/5689288/how-to-remove-whitespace-from-right-end-of-nsstring/5689826#5689826和我的,表现最好。

@implementation NSString (TrimmingAdditions)

- (NSString *)stringByTrimmingLeadingCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger location = 0;
    NSUInteger length = [self length];
    unichar charBuffer[length];    
    [self getCharacters:charBuffer];

    for (location; location < length; location++) {
        if (![characterSet characterIsMember:charBuffer[location]]) {
            break;
        }
    }

    return [self substringWithRange:NSMakeRange(location, length - location)];
}

- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger location = 0;
    NSUInteger length = [self length];
    unichar charBuffer[length];    
    [self getCharacters:charBuffer];

    for (length; length > 0; length--) {
        if (![characterSet characterIsMember:charBuffer[length - 1]]) {
            break;
        }
    }

    return [self substringWithRange:NSMakeRange(location, length - location)];
}

@end

进而:

NSString *trimmedString = [yourString stringByTrimmingTrailingCharactersInSet:[NSCharacterset whitespaceAndNewlineCharacterSet]];

或者对于前导空格:

NSString *trimmedString = [yourString stringByTrimmingLeadingCharactersInSet:[NSCharacterset whitespaceAndNewlineCharacterSet]];

它以抽象方式实现,因此您可以将它与任何可能的方式一起使用NSCharacterSet, whitespaceAndNewlineCharacterSet只是其中之一。

为了方便起见,您可能需要添加这些包装方法:

- (NSString *)stringByTrimmingLeadingWhitespace {
    return [self stringByTrimmingLeadingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

- (NSString *)stringByTrimmingTrailingWhitespace {
    return [self stringByTrimmingTrailingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

- (NSString *)stringByTrimmingLeadingWhitespaceAndNewline {
    return [self stringByTrimmingLeadingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (NSString *)stringByTrimmingTrailingWhitespaceAndNewline {
    return [self stringByTrimmingTrailingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

Edit:使用 charBuffer 恢复到初始版本以获得更好的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除 NSString 右端的空格? 的相关文章

  • popToRootViewControllerAnimated 不显示根视图控制器

    我需要一些关于导航控制器问题的帮助 我有一个navigationController with 4 ViewControllers推 我推的最后一个 vc 提出了进一步的ViewController模态地 模态ViewController提
  • 如何在iphone中画同心圆?

    我想画一个戒指 环应填充在外圆中 我参考了一个文档http developer apple com library mac documentation GraphicsImaging Conceptual drawingwithquartz
  • 将左按钮添加到 UINavigationBar (iPhone)

    我创建了一个新的基于导航的 iPhone 应用程序 我将其添加到 RootViewController 中 void viewDidLoad super viewDidLoad UIBarButtonItem addButton UIBar
  • 将 NSDate 从一个时区更改为另一个时区 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从不同的类访问 NSMutableArray

    我有一个类 其中形成了 NSMutableArray 对象 如下所示 navBarColour NSMutableArray alloc initWithObjects colourOfNavBar nil 然后我有另一个类 其中正确添加了
  • 删除核心数据中的对象

    我的核心数据模型中有一个实体 如下所示 interface Selection NSManagedObject property nonatomic retain NSString book id property nonatomic re
  • 从 Angularjs 应用程序中的 iOS Webview 调用 Javascript 函数

    我的问题是 当我尝试从 UIWebView 中调用 AngularJS 应用程序中存在的 javascript 函数时 该函数无法识别 当我在典型的 html 结构中调用该函数时 该函数会按预期被识别 下面提供的示例 目标 C void v
  • 在 iPhone 通讯簿中创建群组

    我正在开发一个 iPhone 应用程序 该应用程序使用将联系人添加到地址簿中 我已经能够将联系人添加到地址簿 但我面临的问题是在将联系人记录添加到我创建的组时 该联系人将在不在已创建组内的所有联系人下创建 下面是我使用过的代码 create
  • 在 iOS 应用程序中处理数据(选择什么?NSData、CoreData、sqlite、PList、NSUserDefaults)

    当我开发 iPhone 应用程序 时间跟踪器 待办事项列表等 时 我永远不知道处理数据的最佳方式是什么 有一次我使用了 plist 下次使用 sqlite 或 CoreData 您如何决定什么最适合您的项目 只谈数据管理 例如 如果您想开发
  • iphone XMPP 应用程序运行后台

    我使用 XMPP 框架创建了一个聊天应用程序 当我退出应用程序 进入后台模式 时 我想接收聊天消息 并且还需要显示图标徽章 我该怎么做 您确实可以通过将基于 XMPP 框架的应用程序称为 VoIP 应用程序来在 iOS4 中的后台运行该应用
  • IOS 7 UITextField resignFirstResponder 坏

    当我在自定义单元格内使用 UItextField 时 以及当我 resignFirstResponder 文本字段时 我发生崩溃 但它不再可见 表视图滚动到窗口外 我仍然可以找到文本字段 指针继续可访问 它不为空 并且崩溃仅发生在 IOS7
  • “试图弹出到不存在的视图控制器。”

    当我调用我的方法 DismissView 时 我收到此错误 这是方法存根 IBAction dismissView RootViewController rootController RootViewController alloc ini
  • iPhone UIDatePicker 风格

    有什么方法 技巧可以更改 uiDatePicker 的大小 字体 背景颜色等吗 甚至背景颜色属性也不起作用 并且选择器的默认样式与我的应用程序的设计无关 也许你可以使用 UIPickerView 来代替 我见过人们使用图像作为背景 不过 您
  • UIPageControl 未显示

    我使用以下内容来显示滚动视图和页面控制 scrollView UIScrollView alloc initWithFrame CGRectMake 0 0 320 179 pageControl UIPageControl alloc i
  • 在ios中通过社交框架登录Facebook

    我是 iOS 开发新手 我必须将 Facebook 登录集成到我的 iOS 应用程序中 当用户登录时 它会获取所有信息并将其导航到主屏幕 我已经通过 Facebook 最新的 SDK 完成了此操作 但我希望通过社交框架完成此操作 我浏览了很
  • UIModalPresentationFormSheet 的圆角

    如果这是一个明显的问题 请原谅我 我是个相对较新的人 我有一个模态视图 我设置了自定义尺寸和圆角 void viewWillLayoutSubviews super viewWillLayoutSubviews self view supe
  • 具有多个嵌入 Segue 的 ContainerView

    有没有办法让单个 ContainerView 具有多个嵌入序列 目的是让 ContainerView 根据按下的按钮来容纳一些不同的 ViewController 一次只能看到一个 我想使用嵌入序列 以便在 Interface Builde
  • 用强/弱自我打破保留周期

    我读过关于强 弱的帖子self打破保留周期 但我仍然对它们如何工作感到困惑 我理解使用 weak typeof self weakSelf self创建对自我的弱引用 但我对强引用感到困惑 据我了解 强引用是指对self这样它就不会在块结束
  • 我可以在 iOS 中测量蓝牙信号强度吗?

    Can I 测量信号强度我的 iPhone 范围内的蓝牙设备数量 基本上我想要做的是扫描范围内的设备列表 然后查看哪个设备的信号强度最高 在 iOS 中是否可行 如果可以 我该怎么做 是的 有一种方法可以测量蓝牙低功耗 4 0 的信号强度
  • 当使用 loadView 创建视图时,视图的框架大小在旋转时不会改变

    我有没有 xib 的 UIViewController 并且我正在使用 loadView 来构建创建并添加两个滚动视图的 UI 问题是 当旋转发生时 主视图框架的大小不会改变 我的意思是 我在 loadView 中设置主视图的初始帧大小 纵

随机推荐

  • BoostBuild:patchlevel.h 不存在

    我正在尝试在 Ubuntu 11 04 上使用 bjam 编译 C 项目 我不断收到以下错误 libraries boost 1 44 0 boost python detail wrap python hpp 75 24 fatal er
  • 调试 pthread 需要什么?

    我想在我的自定义 Linux 发行版上调试 pthreads 但我缺少一些东西 我的主机是 Ubuntu 12 04 我的目标是使用 crosstool NG 交叉编译器工具集构建的 i486 定制嵌入式 Linux 操作系统的其余部分是使
  • 在待完成的活动消失后,找出当前活动最终是否将成为任务根

    If FirstActivity是任务的根 它会自行完成并启动SecondActivity 然后调用isTaskRoot in SecondActivity立即返回false 因为FirstActivity的完成是异步发生的 因此尚未完成
  • 给定日期,获取星期几 - SYSTEMTIME

    如果提供了日期 月 日 年 是否可以使用 SYSTEMTIME 确定星期几 或者该结构只是单向的 如果 SYSTEMTIME 无法做到这一点 使用 Win32 完成我所要求的任务的最轻量级方法是什么 根据msdn http msdn mic
  • 如何在 iOS 设备 ( Safari ) 中消除或限制滚动事件

    我正在尝试为移动和桌面设备实现无限滚动下拉菜单 在 无限滚动 下 我的意思是 如果您有 100 条记录 当到达可滚动容器的末尾时 将加载 20 条新记录 并且前 20 条记录将隐藏 向后方向相同 我遇到了以下问题 除了 Safari 移动浏
  • 必须先发出 STARTTLS 命令

    我正在用我的运行这个简单的例子Gmail帐户 但它无法正常工作并给出以下错误 send failed exception com sun mail smtp SMTPSendFailedException 530 5 7 0 Must is
  • std::common_type 的目的是什么?

    我开始看std common type我不太确定其目的和功能 有几件事仍然让我觉得奇怪 参数的顺序很重要 common type
  • 访问 Pod 中的资源

    我想将图像资源包含在 cocoapod 库中 但访问它们时遇到问题 我已阅读这些资源来寻求帮助 Cocoapods 资源 http guides cocoapods org syntax podspec html resources Coc
  • Rust 中的 Some 和 Option 有什么区别?

    它们是一样的吗 我有时可以看到文档使用它们 就好像它们是相等的一样 不 它们不一样 并且文档将它们视为相同是错误的 或者是您的误解 Option是一种类型 更准确地说 是泛型类型构造函数 Option
  • 返回具有多种类型迭代器的 impl Iterator [重复]

    这个问题在这里已经有答案了 我试图将我的问题提炼成一个最小的例子 在下面的函数中 如果我只有 if 语句的任一分支 则程序可以正常编译 fn foo bar bool gt impl Iterator
  • 如何从自定义主键迁移到默认ID [重复]

    这个问题在这里已经有答案了 我创建了一个以电子邮件地址作为自定义主键的模型 如下所示 email models EmailField max length 255 primary key True 现在我意识到这对我来说不是一个好主意 我想
  • 取消 UIView animateWithDuration 中的块

    void startLoading self blink void blink UIView animateWithDuration 0 5 delay 0 0 options UIViewAnimationOptionAllowUserI
  • 为什么我必须将 Vinyl-source-stream 与 gulp 一起使用?

    我正在尝试使用 gulp 和 browserify 来改变我的 jsx文件到 js files var gulp require gulp var browserify require browserify var reactify req
  • 来自 REST 端点的 PHP 模拟数据

    我正在围绕第三方 API 编写 PHP 包装器 对于练习来说更是如此 但我目前还没有在任何地方看到一个好的可用的 所以也许将来它会被其他人使用 我的单元测试非常简单 但现在我已经达到了极限 API 的开发人员有最大请求限制 每秒 1 个 每
  • 如何使提交按钮显示为链接?

    这在 IE 中不起作用 text button background transparent text decoration none cursor pointer
  • 应用程序应该处于运行状态才能触发意图吗?

    我有一个非常简单的 IntentReceiver 来在时间变化时接收事件 这是代码 public class IntentRec extends BroadcastReceiver Override public void onReceiv
  • 配置文件与默认钥匙串中的任何有效证书/私钥对不匹配

    我正在为一家公司开发一个应用程序 他们给了我管理员角色 以便我可以编辑配置文件 我在 XCode 上收到 找不到分发文件的有效签名身份 和 配置文件与默认钥匙串中的任何有效证书 私钥对不匹配 错误 通常我会通过创建密钥链来撤销分发配置文件我
  • Facebook SSO 如何知道要返回哪个应用程序?

    使用 Facebook SSO 单点登录 在系统提示用户授予使用其 Facebook 帐户的权限后 它会将用户引导回正在运行 SSO 的应用程序 FB SSO 具体是如何实现这一目标的 授予权限后如何知道要重新打开哪个应用程序 我们正在构建
  • 如何消除 ☎ unicode?

    在网页抓取过程中 在删除所有 html 标签后 我得到了 unicode 中的黑色电话字符 u260e 但不同于这个回应 https stackoverflow com questions 7266842 character u260e我也
  • 如何删除 NSString 右端的空格?

    这会删除字符串两端的空格 NSString newString oldString stringByTrimmingCharactersInSet NSCharacterSet whitespaceAndNewlineCharacterSe