------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
//
// main.m
// NSString
//
// Created by LiuWei on 15/4/18.
// Copyright (c) 2015年 LiuWei. All rights reserved.
//
#import <Foundation/Foundation.h>
// 字符串创建的几种方式
void createString();
// 从文件中读取文本并创建字符串
void createStringFromText();
// NSString的导出
void stringExport();
// 字符串大小写处理
void lowerUpperCase();
// 字符串的比较
void compareString();
// 字符串的搜索
void searchString();
// 字符串的截取
void subString();
// 字符串与路径操作
void path();
// 扩展名处理
void extension();
// 其它用法
void others();
int main()
{
// createString();
// createStringFromText();
// stringExport();
// lowerUpperCase();
// compareString();
// searchString();
// subString();
// path();
// extension();
others();
return 0;
}
#pragma mark - 创建字符串
void createString()
{
// 以这种方式创建的字符串对象是不需要释放的
NSString *str1 = @"hello Foundation!";
NSString *str6 = [NSString stringWithFormat:@"my name is %@, and age is %i", @"lucy", 23];
NSLog(@"%@", str6);
NSLog(@"%@", str1);
// 以下字符串在不使用ARC机制的情况下,都要进行手动释放
NSString *str2 = [[NSString alloc]init];
str2 = @"[[NSString alloc]init] need to releaes";
[str2 release];
NSString *str3 = [[NSString alloc]initWithString: @"sring 3"];
[str3 release];
NSString *str4 = [[NSString alloc]initWithUTF8String: "string 4"];
[str4 release];
NSString *str5 = [[NSString alloc]initWithFormat:@"a string with format %i, % i", 20, 21];
[str5 release];
}
#pragma mark - 从文件中获取字符串
void createStringFromText()
{
// 从文件中读取内容
NSString *path = @"/Users/liuwei/Desktop/testString.txt"; // 文件路径
NSString *str1 = [NSString stringWithContentsOfFile:path]; // 不能解析中文, 这个方法已经过期
NSLog(@"%@", str1);
/*
enum {
NSASCIIStringEncoding = 1, 0..127 only
NSNEXTSTEPStringEncoding = 2,
NSJapaneseEUCStringEncoding = 3,
NSUTF8StringEncoding = 4,
NSISOLatin1StringEncoding = 5,
NSSymbolStringEncoding = 6,
NSNonLossyASCIIStringEncoding = 7,
NSShiftJISStringEncoding = 8, kCFStringEncodingDOSJapanese
NSISOLatin2StringEncoding = 9,
NSUnicodeStringEncoding = 10,
NSWindowsCP1251StringEncoding = 11, Cyrillic; same as AdobeStandardCyrillic
NSWindowsCP1252StringEncoding = 12, WinLatin1
NSWindowsCP1253StringEncoding = 13, Greek
NSWindowsCP1254StringEncoding = 14, Turkish
NSWindowsCP1250StringEncoding = 15, WinLatin2
NSISO2022JPStringEncoding = 21, ISO 2022 Japanese encoding for e-mail
NSMacOSRomanStringEncoding = 30,
NSUTF16StringEncoding = NSUnicodeStringEncoding, An alias for NSUnicodeStringEncoding
NSUTF16BigEndianStringEncoding = 0x90000100, NSUTF16StringEncoding encoding with explicit endianness specified
NSUTF16LittleEndianStringEncoding = 0x94000100, NSUTF16StringEncoding encoding with explicit endianness specified
NSUTF32StringEncoding = 0x8c000100,
NSUTF32BigEndianStringEncoding = 0x98000100, NSUTF32StringEncoding encoding with explicit endianness specified
NSUTF32LittleEndianStringEncoding = 0x9c000100 NSUTF32StringEncoding encoding with explicit endianness specified
};
typedef NSUInteger NSStringEncoding;
*/
// 指定字符串编码为 NSUTF8StringEncoding
NSError *error;
str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
// 如果error中没有值则说明没有错误, 否则说明有错误
if(error)
{
NSLog(@"读取文件失败: %@", error);
}
else
{
NSLog(@"读取文件成功: %@", str1);
}
NSURL *url = [NSURL URLWithString:@"file:///Users/liuwei/Desktop/testString.txt"];
NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if(error)
{
NSLog(@"读取文件失败: %@", error);
}
else
{
NSLog(@"读取文件成功: %@", str2);
}
// 解析网页文本
NSURL *baidu = [NSURL URLWithString:@"http://www.baidu.com"]; // 指定网页路径
// 按照指定编码从指定网页读取字符串到NSString对象中, 成功error为空, 否则不为空
NSString *str3 = [NSString stringWithContentsOfURL:baidu encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str3);
}
#pragma mark - 导出字符串
void stringExport()
{
NSString *str = @"今天天所真不错呀, 编程什么的最, 么么哒!"; // 要写入文件的字符串
NSString *path = @"/Users/liuwei/Desktop/abc/testString2.txt"; // 指定要写入字符串的文件名及路径
NSError *error; // 接收错误代码
// 按照指定编码写入到路径指定的文件中去, 成功error为空, 否则不为空
// 写入成功会覆盖原来内容, 如果指定的文件不存在则会创建同名称的文件并写入
// 如果指定的文件夹不存在, 则直接报错
// 编码指定错误也会报错
// atomically:YES 进行原子性操作 会创建一个中间的临时文件 以保证安全的写入
// 文件写入成功返回 YES, 否则返回NO
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(error)
{
// localizedDescription 会以字符串方式返回主要的错误信息
NSLog(@"写入失败 %@", [error localizedDescription]);
}
else
{
NSLog(@"写入成功! %@", error);
}
}
#pragma mark - 大小写处理
void lowerUpperCase()
{
NSString *str = @"lowercase and uppercase test string!";
// 全部转大写
str = [str uppercaseString];
NSLog(@"%@", str);
// 全部转小写
str = [str lowercaseString];
NSLog(@"%@", str);
// 首字母变大写 非单词首字母的字母变小写
str = [@"i aM a tEST sTRING" capitalizedString];
NSLog(@"%@", str);
}
#pragma mark - 字符串的比较
void compareString()
{
NSString *str1 = @"1234567";
NSString *str2 = @"1234567";
// 对象方法 isEqualToString 比较两个字符串内容是否相同, 相同返回YES, 否则返回NO
if ([str1 isEqualToString:str2])
{
NSLog(@"两个字符串内容相同");
}
else
{
NSLog(@"两个字符串内容不相同");
}
// 比较两字符串大小
str1 = @"abcd good";
str2 = @"Abcd good";
// NSComparisonResult
/*
typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L,
NSOrderedSame,
NSOrderedDescending
};
*/
// compare返回值类型为NSComparisonResult的枚举类型
NSComparisonResult result = [str1 compare:str2];
NSLog(@"str1 = \"%@\" compare str2 = \"%@\"", str1, str2);
switch (result)
{
// 升序 代码相比较的两个字符串, 右边的比左边的大
case NSOrderedAscending:
NSLog(@"str1 < str2");
break;
// 两个字符串的内容相同
case NSOrderedSame:
NSLog(@"str1 == str2");
break;
// 降序 代表相比较的两个字符串, 左边的比右边的大
case NSOrderedDescending:
NSLog(@"str1 > str2");
break;
default:
break;
}
// 忽略大写写进行比较
result = [str1 caseInsensitiveCompare:str2];
NSLog(@"%@", @"caseInsensitiveCompare:");
switch (result)
{
// 升序 代码相比较的两个字符串, 右边的比左边的大
case NSOrderedAscending:
NSLog(@"str1 < str2");
break;
// 两个字符串的内容相同
case NSOrderedSame:
NSLog(@"str1 == str2");
break;
// 降序 代表相比较的两个字符串, 左边的比右边的大
case NSOrderedDescending:
NSLog(@"str1 > str2");
break;
default:
break;
}
}
#pragma mark - 字符串的搜索
void searchString()
{
NSString *str = @"NSObject.h";
// 搜索字符串是否以指定字符串开头
// 是返回YES, 否则返回NO
NSLog(@"\"%@\" 是否以NS开头: %@", str, [str hasPrefix:@"NS"] ? @"是" : @"否");
// 搜索字符串是否以指定字符串结尾
// 是返回YES, 否则返回NO
NSLog(@"\"%@\" 是否以.h结尾: %@", str, [str hasSuffix:@".h"] ? @"是" : @"否");
str = @"123456789678sdf";
NSRange range;
range = [str rangeOfString:@"678"]; // 查找指定字符串在串在的范围, 起始索引和长度 如果没找到, location为NSNotFound, length为0
if (range.length == 0)
{
NSLog(@"没找到");
}
else
{
NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
}
// 从字符串尾部开始搜索
range = [str rangeOfString:@"678" options:NSBackwardsSearch];
if (range.length == 0)
{
NSLog(@"没找到");
}
else
{
NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
}
NSRange range2 = NSMakeRange(1, 10);
// 从指定范围内开始搜索
range = [str rangeOfString:@"456" options:NSBackwardsSearch range:range2];
if (range.length == 0)
{
NSLog(@"没找到");
}
else
{
NSLog(@"找到字串所在范围是: %@", NSStringFromRange(range));
}
}
#pragma mark - 字符串的截取
void subString()
{
NSString *str = @"12345678";
// 从指定索引处开始截取字符串到尾部
str = [str substringFromIndex:3];
NSLog(@"%@", str);
str = @"12345678";
// 从字符串头部截取到指定索引之前
str = [str substringToIndex:3];
NSLog(@"%@", str);
str = @"12345678";
NSRange range = NSMakeRange(3, 4);
// 截取指定范围内的字符串 从location开始的length个字符
str = [str substringWithRange:range];
NSLog(@"%@", str);
// 分割字符串到数组
NSString *str2 = @"1-2-3-4-5";
// 以指定字符为分隔符, 分割后的数值存放在数组中
NSArray * array = [str2 componentsSeparatedByString:@"-"];
NSLog(@"%@", array);
NSLog(@"%@", [array objectAtIndex:2]);
}
#pragma mark - 字符串与路径操作
void path()
{
NSMutableArray *components = [NSMutableArray array];
[components addObject:@"Users"];
[components addObject:@"LiuWei"];
[components addObject:@"Desktop"];
// 将数组中各字符串元素拼接成路径
NSString *path = [NSString pathWithComponents:components];
NSLog(@"%@", path);
// 把路径切割成数组
NSArray *components2 = [path pathComponents];
NSLog(@"%@", components2);
// 判断是否为绝对路径 判断依据路径前边有无 "/"
NSLog(@"%i", [path isAbsolutePath]);
// 获取路径中最后一个目录
NSLog(@"%@", [path lastPathComponent]);
// 去掉最后一个目录后得到的目录
path = [path stringByDeletingLastPathComponent];
NSLog(@"%@", path);
// 在最后边拼接上一个目录
path = [path stringByAppendingPathComponent:@"Desktop"];
NSLog(@"%@", path);
}
#pragma mark - 扩展名处理
void extension()
{
// 获取扩展名
NSString *str = @"/Users/LiuWei/Desktop/test.txt";
NSLog(@"扩展名: %@", [str pathExtension]);
// 删掉尾部的扩展名
str = [str stringByDeletingPathExtension];
NSLog(@"%@", str);
// 拼接尾部的扩展名
NSLog(@"%@", [str stringByAppendingPathExtension:@"exe"]);
}
#pragma mark - 其它用法
void others()
{
// 字符串转整型
NSString *str = @"1242";
int num = [str intValue];
NSLog(@"%i", num);
// 返回字符串字符个数
str = @"一个字";
NSLog(@"str 中有 %lu 个字符", [str length]);
// 取出指定索引处的字符
NSLog(@"%C", [str characterAtIndex:1]);
// 转成C语言字符串
const char *cstr = [str UTF8String];
printf("%s", cstr);
}