iOS-如何返回某个字符串的拼音助记码

    我也是看了网上的一个示例代码后,在它的基础上进行的修改。因为项目上会用到,我相信很多人的项目上也会用到。所以实现后,也赶紧分享出来,希望后来人不需要花费时间了。

提示:这里用到了正则表达式,使用了一个第三方开源的组件:RegexKitLite (该组件如何使用网上教程很多)

 

 

#pragma mark - 获取拼音首字母(传入汉字字符串, 返回小写拼音首字母)

+(NSString *)pinYingFirstCharactorStr:(NSString *)aString

{

    //转成了可变字符串

    NSMutableString *str = [NSMutableString stringWithString:aString];

    //先转换为带声调的拼音

    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);

    //再转换为不带声调的拼音

    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);

    //转化为小写拼音

    NSString *pinYin = [str lowercaseString];

    

    //根据指定的正则表达式将拼音字串转换成各个子字符串数组

    NSString *regexString = @"\\s";  //使用的拆分间隔的正则符号是空格

    NSArray* aArray=[pinYin componentsSeparatedByRegex:regexString];  //进行拆分

    

    //遍历字符串数组,拼接首字母

    NSString* strReturn=@"";

    NSString* strProc = @"";

    for (int i=0; i<aArray.count; i++) {

        

        //针对子串可能有数字进一步处理

        NSString* strTmp=[CRGOtherHelper firstReplaceInNumberStr:aArray[i]];

        if (strTmp!=nil) {

            strReturn=[strProc stringByAppendingString:strTmp];

            strProc=strReturn;

        }

        else

        {

            strReturn=aArray[i];

        }

        

    }

    

    //获取并返回首字母

    return strReturn;

}

 

//对传入的字符串进行按数字间隔拆分到一个新的子数组中,对子数组中的非空成员取首字母得到一个临时字符。

//然后用这个临时字符去替换原有的数组成员中的字符串的对应部分(查找方式是比对先前拆分的成员)

+(NSString*)firstReplaceInNumberStr:(NSString*)waitProcStr

{

    NSString* strResult=nil;

    NSString* strWait=[[waitProcStr copy] autorelease];

    

    //找字符串

    NSString *regexString=@"[0-9]";

 

    //进一步拆分成子串数组

    NSArray* strArray=[waitProcStr componentsSeparatedByRegex:regexString];  //进行拆分

    NSArray* strCopy=nil;

    if (strArray.count!=0) {

        strCopy=[strArray copy];

    }

    

    

    for (int j=0; j<strArray.count; j++) {

        

        if (![(NSString*)strArray[j] isEqualToString:@""])

        {

            //取首字母

            NSString* fistChar=[strArray[j] substringToIndex:1];

            

            //部分替换

            strResult=[strWait stringByReplacingOccurrencesOfRegex:strCopy[j] withString:fistChar];

            strWait=strResult;

        }

    }

    

    return strResult;

}

希望大家能用得上!(测试中发现全是数字的字符串会出错,有修改了下,已更新)

转载于:https://www.cnblogs.com/ashacher/p/5595667.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wifi rssi 计算 距离_WiFi和WLAN是一样的?真相在这里~别再傻傻分不清了

我们通常上网的时候会说连接WiFi如果注意到无线网络的名称就会发现手机的连接显示是WLAN别再将WiFI和WLAN搞混了&#xff01;二者的定义WLANWLAN的全称为 Wireless Local Area Networks,中文意思为无线局域网络&#xff0c;是一种数据传输系统。它是利用射频技术进行数据传输&a…

【Shell剧本练习】得出的结论是当前用户

推断是否当前用户root。假设是暗示root用户&#xff0c;假设而不是提示对于普通用户#!/bin/bash #title: testus.sh #author: orangleliu #date: 2014-08-09 #desc: get current user, if it is root user, tell us it is super user or tell us is a common user# #Function C…

播放框架模块:分而治之

通常情况是您开始开发应用程序并继续满足要求。 当您的应用程序变得更大时&#xff0c;您开始意识到将其分为不同组件的便利。 而且&#xff0c;当您开发第二个或第三个应用程序时&#xff0c;您开始认识到可以在不同应用程序之间重用的某些功能。 这是模块化应用程序的两个很好…

Alpha阶段项目总结

1.我们的软件要解决什么问题&#xff1f;是否定义得很清楚&#xff1f;是否对典型用户和典型场景有清晰的描述&#xff1f; 我们的软件是一款针对健康饮食而做的一款饮食健康软件&#xff0c;对生活中我们经常迟到的很多事物组合都进行了详细的注解&#xff0c;用户可以清楚地看…

实用的it知识学习_怎样能更快更好的学习好书法?分享一些比较实用的理论知识...

如何能更快更高效的学习书法&#xff1f;首先了解一些书法理论知识是很有必要的&#xff01;它能让你在学习书法的过程中不至于迷茫 &#xff01;能助你更快学好书法&#xff01;一、书论在实践中产生我们大部分人都觉得学习书法可以没有理论&#xff0c;但不可无技法。但理论和…

九度oj-1001-Java

题目描述&#xff1a; This time, you are supposed to find AB where A and B are two matrices, and then count the number of zero rows and columns. 输入&#xff1a; The input consists of several test cases, each starts with a pair of positive integers M and N …

字节流与字符流的区别

最近在项目中遇到一个encoding的问题&#xff0c;记录一下。 具体而言就是&#xff0c;项目中有A/B两个部分&#xff0c;A部分由我们负责&#xff0c;Java实现&#xff1b;B部分是UK负责的&#xff0c;使用Delphi&#xff0c;A、B在交互时发送一个http请求&#xff0c; 请求汇总…

通过MOXy实现使JAXB更加清洁

编组和解组XML时使用JAXB的主要优点是编程模型。 只需注释几个POJO并使用JAXB API&#xff0c;您就可以很容易地序列化为XML和从XML反序列化。 您无需担心有关XML如何编组/解组的细节。 一切都比DOM和SAX等替代方案简单得多。 现在&#xff0c;XML文件中的数据本质上趋于分层。…

android 上下滚动文字_计算机毕设项目004之Android系统在线小说阅读器

计算机毕设项目004之Android系统在线小说阅读器一. 项目名称基于Android系统的在线小说阅读器二. 项目简介项目中的角色功能&#xff1a;支持翻页动画:仿真翻页、覆盖翻页、上下滚动翻页等翻页效果。支持页面定制:亮度调节、背景调节、字体大小调节支持全屏模式(含有虚拟按键的…

697. 数组的度

给定一个非空且只包含非负数的整数数组 nums&#xff0c;数组的 度 的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组&#xff0c;返回其长度。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&a…

python math模块

1.math简介 >>> import math >>>dir(math) #这句可查看所有函数名列表 [__doc__, __name__, __package__, acos, acosh, asin, asinh, atan, atan2, atanh, ceil, copysign, cos, cosh, degrees, e, erf, erfc, exp, expm1, fabs, factorial, flo…

Visual Studio找不到adb.exe错误解决

Visual Studio找不到adb.exe错误解决 错误信息&#xff1a;Cannot find adb.exe in specified SDK path。出现这种情况&#xff0c;是因为没有安装Android SDK Platform-tools。解决办法&#xff1a;在SDK Manager中&#xff0c;安装该组件即可。 转载于:https://www.cnblogs.c…

Vaadin应用程序中的EJB查找

自从我实现上一个服务定位器以来已经有很长时间了。 我认为不再需要考虑Java EE CDI &#xff08;上下文和依赖注入&#xff09;的成熟度。 我的第一个实现是在基于Struts的Web应用程序中使用EJB。 之后&#xff0c;我开始使用JSF&#xff0c;它只需要带有EJB或Resource的带注释…

基线检查工具_最新版CAD燕秀工具箱2.87(支持20042021)

好课推荐&#xff1a;零基础CAD&#xff1a;点我CAD家装&#xff1a;点我 周站长CAD&#xff1a;点我CAD机械&#xff1a;点我revit教程&#xff1a;点我CAD建筑&#xff1a;点我CAD三维&#xff1a;点我全屋定制&#xff1a;点我 ps教程&#xff1a;点我苹果版CAD:点我 3dmax教…

团队项目记录2

遇到的问题&#xff1a;在对Trigger机关进行测试时发现&#xff0c;画出的轨道也会将机关触发。 问题描述&#xff1a;Trigger机关的作用是在发生碰撞时运行脚本中指定的特定物体的特定函数&#xff0c;在这个例子当中特定的物体是一块地板&#xff0c;特定的函数的功能是删除这…

关于java.lang.ArithmeticException

java.lang.ArithmeticException “数学运算异常”&#xff0c;可能是自己的数学运算公式出现了错误、违反了数学运算规则。错误记录&#xff1a; 出错原因&#xff1a; a % b 中b不能为0

1103. Integer Factorization (30)

题目如下&#xff1a; The K-P factorization of a positive integer N is to write N as the sum of the P-th power of K positive integers. You are supposed to write a program to find the K-P factorization of N for any positive integers N, K and P. Input Specifi…

Java EE 6与Spring Framework:技术决策过程

在过去的几个月中&#xff0c;我们经历了这个决策过程&#xff1a;为Java平台上的企业开发选择哪种技术堆栈&#xff1f; 有多种选择。 但是&#xff0c;我们深入讨论的是&#xff1a;纯Java EE 6堆栈与带有Java EE的Spring。 以下博客文章总结了当您考虑这些技术堆栈选项之一时…

DOM 基础 HTML标签 元素 属性

什么是HTML标签 HTML标签标记了HTML文档和HTML元素 HTML标签由开始标签和结束标签组成.开始标签为尖括号包围的元素名,结束标签为尖括号包围的斜杠和元素名 例如:<h2> My First Heading</h2> HTML基本标签 标题(Heading)是通过h1 - h6等标签进行定义的.段落 是通过…

允许服务与桌面交互_vivo 正式推出 Origin OS,融合自然设计与全新交互

点击右上角关注我们&#xff0c;每天给您带来最新最潮的科技资讯&#xff0c;让您足不出户也知道科技圈大事&#xff01;今天下午&#xff0c;vivo 推出了全新 Origin OS 手机系统。它采用了源于自然界的设计理念&#xff0c;同时加入了全新并且允许用户进行深度自定义的交互方…