iOS_汉字转拼音_pinyin4objc

最终效果图:





ViewController.h

//
//  ViewController.h
//  PinYin4Objc汉字转拼音演示demo
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
// 输入框
@property (nonatomic,weak) IBOutlet UITextField *textFieldInput;
// 显示用时多少
@property (nonatomic,weak) IBOutlet UILabel *labelTime;
// 显示字数多少
@property (nonatomic,weak) IBOutlet UILabel *labelWordsCount;
// 结果显示框
@property (nonatomic,weak) IBOutlet UITextView *textFieldResult;

// 转换按钮
@property (nonatomic,weak) IBOutlet UIButton *btnOK;
- (IBAction)btnOKClick:(id)sender;
@end


ViewController.m

//
//  ViewController.m
//  PinYin4Objc汉字转拼音演示demo
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.


/*
 PinYin4Objc 是一个流行的汉字(支持简体和繁体)转拼音的objc库,有以下特性:
 1.效率高,使用数据缓存,第一次初始化以后,拼音数据存入文件缓存和内存缓存,后面转换效率大大提高;
 2.支持自定义格式化,拼音大小写等等;
 3.拼音数据完整,支持中文简体和繁体,与网络上流行的相关项目比,数据很全,几乎没有出现转换错误的问题。
 
 PinYin4Objc is a popular objective-c library supporting convertion between Chinese(both Simplified and Tranditional) characters and most popular Pinyin systems, it's performance is very efficient, data cached at first time. The output format of pinyin could be customized.
 
 性能比较:
 与之前的pinyin,POAPinyin和PYMethod等项目比较,PinYin4Objc的速度是非常快的
 
 声调格式化。例如:“刘”字的格式化后为“liu2”或“liu”或“liú”
 
 对特殊拼音ü的的显示格式。例如“u:”或“v”或“ü”
 
 大小写的转换。例如:“liu2”或“LIU2”
 
 设置声调格式:
 outputFormat.setToneType(HanyuPinyinToneType);
 参数HanyuPinyinToneType有以下常量对象:
 
 HanyuPinyinToneType.WITH_TONE_NUMBER 用数字表示声调,例如:liu2
 
 HanyuPinyinToneType.WITHOUT_TONE 无声调表示,例如:liu
 
 HanyuPinyinToneType.WITH_TONE_MARK 用声调符号表示,例如:liú
 
 
 设置特殊拼音ü的显示格式:
 
 outputFormat.setVCharType(HanyuPinyinVCharType);
 
 参数HanyuPinyinVCharType有以下常量对象:
 
 HanyuPinyinVCharType.WITH_U_AND_COLON 以U和一个冒号表示该拼音,例如:lu:
 
 HanyuPinyinVCharType.WITH_V 以V表示该字符,例如:lv
 
 HanyuPinyinVCharType.WITH_U_UNICODE 以ü表示
 
*/

#import "ViewController.h"
#import "PinYin4Objc.h"
@interface ViewController ()

@end

@implementation ViewController


// 点击按钮,转换汉字为拼音
- (IBAction)btnOKClick:(id)sender
{
    // 1,获取输入的文本
    NSString *inputText=_textFieldInput.text;
    // robust判断
    if ([inputText isEqual:@""]) {
        _labelTime.text= @"";
        _labelWordsCount.text = @"";
        _textFieldResult.text = @"";
        // 输入框活的焦点
        [_textFieldInput becomeFirstResponder];
        return;
    }
    // 2,实例化拼音格式化对象
    HanyuPinyinOutputFormat *outputFormat=[[HanyuPinyinOutputFormat alloc] init];
    // 3,设置拼音格式化对象的参数------重点
    /*
     typedef enum {
     ToneTypeWithToneNumber,数字1234表示声调
     ToneTypeWithoutTone,   没有声调
     ToneTypeWithToneMark   标记声调 这个用不了
     }ToneType;
     
     typedef enum {
     VCharTypeWithUAndColon,
     VCharTypeWithV,
     VCharTypeWithUUnicode
     }VCharType;
     */
    // 声调就是没有声调
    // [outputFormat setToneType:ToneTypeWithoutTone];
    // 声调是数字,跟在后面 海阔天空 <----->  hai3 kuo4 tian1 kong1
    [outputFormat setToneType:ToneTypeWithToneNumber];
    // 标记声调的这个用不了...
    // [outputFormat setToneType:ToneTypeWithToneMark];
    
    // V的表示方法:
    [outputFormat setVCharType:VCharTypeWithV];
    // V的表示方法:
    // [outputFormat setVCharType:VCharTypeWithUUnicode];
    // V的表示方法:
    // [outputFormat setVCharType:VCharTypeWithUAndColon];
    
    // 结果是大写还是小写,一般小写
    [outputFormat setCaseType:CaseTypeLowercase];
    // 4,记录转换的开始时间
    NSTimeInterval startTime=[[NSDate date] timeIntervalSince1970];
    // 5,拼音工具类的类方法转换汉字为拼音,参数1:输入的汉字,参数2:格式化器,参数3:seperator分隔符
    NSString *outputPinyin=[PinyinHelper toHanyuPinyinStringWithNSString:inputText withHanyuPinyinOutputFormat:outputFormat withNSString:@" "];
    // 6,记录转换的结束时间
    NSTimeInterval endTime=[[NSDate date] timeIntervalSince1970];
    // 7,计算用时
    NSTimeInterval totalTime=endTime-startTime;
    // 8,回显结果到界面
    _labelTime.text=[NSString stringWithFormat:@"共用时:%fs",totalTime];
    _labelWordsCount.text=[NSString stringWithFormat:@"字符数:%i 个",inputText.length];
    _textFieldResult.text=outputPinyin;
    NSLog(@"%@",outputPinyin);
    // 转换为秒
    // NSLog(@"seconds:%f",(endTime - startTime)/(float)CLOCKS_PER_SEC);
    
    
    
    
    
    
    // 调用自定义方法,退出键盘
    [self exitKeyboard];
    
}
// 自定义方法,退出键盘
- (void)exitKeyboard
{
    // 退出键盘
    // 方式1: self.view内部所有的文本框(包括子孙控件...)都退出第一响应者
    [self.view endEditing:YES];
    return;
    
    // 方式2:
    // 遍历uiview里面所有的控件 ,resignFirstResponder
    for (UIView *obj in self.view.subviews) {
        if ([obj isKindOfClass:[UITextField class]]) {
            [obj resignFirstResponder];
        }
    }
    // 方式3:
    // 在self.view的最开头,铺一个全屏的透明的按钮,连线,只要在屏幕空白区域点击后,就可以调用上面的方式1,退出键盘
}


@end








storyboard截图:






好的,关于Java中判断汉字音调的问题,我可以给您提供一些思路和参考。 首先,Java本身并没有提供直接判断汉字音调的方法,但是通过使用第三方库可以实现这个功能。其中,pinyin4j库是一个比较常用的选择,它可以将汉字换成带音调的拼音字符串。 以下是一个使用pinyin4j库的示例代码,可以将一个汉字字符串换成带音调的拼音字符串: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class TestPinyin { public static void main(String[] args) { String hanzi = "你好世界"; StringBuilder pinyin = new StringBuilder(); for (int i = 0; i < hanzi.length(); i++) { String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi.charAt(i)); if (pinyinArray != null) { pinyin.append(pinyinArray[0]); } else { pinyin.append(hanzi.charAt(i)); } } System.out.println(pinyin.toString()); } } ``` 上述代码中,我们通过遍历汉字字符串的每个字符,调用PinyinHelper类的toHanyuPinyinStringArray方法将其换成拼音字符串,并将结果拼接到StringBuilder对象中。如果该字符没有对应的拼音,则直接将其加入到结果中。 需要注意的是,pinyin4j库中的拼音字符串并不包含音调信息,而是使用数字代表不同的音调。例如,"nǐ hǎo shì jiè"中的音调分别为1、3、4、4,对应的拼音字符串为"ni3 hao3 shi4 jie4"。 如果您需要判断汉字字符串中的音调,可以在上述代码的基础上进行扩展。一种可行的思路是,通过判断每个拼音字符串中的数字来确定对应的音调。例如,以下代码可以统计汉字字符串中一共有几个一声、二声、三声和四声: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class TestPinyin { public static void main(String[] args) { String hanzi = "你好世界"; StringBuilder pinyin = new StringBuilder(); int[] tones = new int[4]; // 存储四个音调的数量 for (int i = 0; i < hanzi.length(); i++) { String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(hanzi.charAt(i)); if (pinyinArray != null) { pinyin.append(pinyinArray[0]); for (int j = 0; j < pinyinArray[0].length(); j++) { char c = pinyinArray[0].charAt(j); if (c >= '1' && c <= '4') { int tone = c - '0' - 1; tones[tone]++; } } } else { pinyin.append(hanzi.charAt(i)); } } System.out.println(pinyin.toString()); System.out.println("一声:" + tones[0]); System.out.println("二声:" + tones[1]); System.out.println("三声:" + tones[2]); System.out.println("四声:" + tones[3]); } } ``` 上述代码中,我们首先定义了一个长度为4的整型数组tones,用于存储不同音调的数量。然后在遍历汉字字符串的每个字符时,将其换成拼音字符串,并统计其中的音调数量。最后输出结果时,可以根据tones数组中的数量来判断不同音调的出现次数。 希望这些提示能够对您有所帮助。如果您有其他问题,可以继续问我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值