iOS

编程语言对比系列:一、字符串的基本使用

2018-02-11  本文已影响340人  oceanfive

前言

最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕业后就开始了app的开发之路,先使用oc进行iOSapp开发,后面应公司需求,又相继学习了java语言并使用java语言进行Androidapp开发,后来微信开放了小程序,应公司需求,又学习了小程序的相关知识,jscsshtml等,脑袋里面有了这么多的编程语言,有时候会有点混乱,因此想到了把这些编程语言的一些内容进行对比、梳理,可以找到他们的相同点和不同点,结果是很好的,让自己的知识更加有深度了,也更加全面了。这篇文章是第一篇,选择的是字符串string,后续会继续更新其他内容的对比。

正在前往全栈的路上!!!

编程语言对比系列:一、字符串的基本使用

大纲为

image

名词解释

属性/方法

一、初始化

OC init

通用

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;

初始化一个的字符串 @""

- (instancetype)init NS_DESIGNATED_INITIALIZER;
+ (instancetype)string;
NSString *str;
NSString *str2;
NSLog(@"%@", str);
NSLog(@"%@", str2);
NSLog(@"-----------");
str = [[NSString alloc] init];
str2 = [NSString string];
NSLog(@"%@", str);
NSLog(@"%@", str2);
NSLog(@"-----------");

//打印:
(null)
(null)
-----------


-----------

二进制 NSData (准确的说应该是十六进制

- (nullable instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
NSData *data = [@"one" dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", data);
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);

//打印:
<6f6e65>
one

//如果编码方式为 NSUnicodeStringEncoding :
<6f6e65>
潮

通过字节bytes

//bytes : 字节数,从缓存buffer中读取,是指向buffer地址的指针,指向的是在缓存中的地址
//len : 需要读取bytes的长度,如bytes为3,len参数为1,则只会读取bytes中的前1个byte
//encoding : 编码方式
//freeBuffer : 操作之后是否释放掉内存
- (nullable instancetype)initWithBytes:(const void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding;
- (nullable instancetype)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)len encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)freeBuffer;    /* "NoCopy" is a hint */
NSData *data = [@"one" dataUsingEncoding:NSUTF8StringEncoding];
const void *bytes = [data bytes];
NSLog(@"%p", bytes);

NSString *str = [[NSString alloc] initWithBytes:bytes length:data.length encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);

//输出:
0x6000000035e0
one

当length参数传1时
0x600000017600
o

字符characters

- (instancetype)initWithCharactersNoCopy:(unichar *)characters length:(NSUInteger)length freeWhenDone:(BOOL)freeBuffer; /* "NoCopy" is a hint */
- (instancetype)initWithCharacters:(const unichar *)characters length:(NSUInteger)length;
+ (instancetype)stringWithCharacters:(const unichar *)characters length:(NSUInteger)length;
// 43 、0x2b 、'+' 这些输出的都是 + 
const unichar ch = 43;
NSString *str = [[NSString alloc] initWithCharacters:&ch length:3];
NSLog(@"%@", str);
//输出:
+
  
  
unichar ch[3];
ch[0] = '+';
ch[1] = 43;
ch[2] = 0x2b;
NSString *str = [[NSString alloc] initWithCharacters:ch length:sizeof(ch) / sizeof(unichar)];
NSLog(@"%@", str);
// 输出:
+++

通过OC字符串 NSString

//通过其他"oc字符串"初始化
- (instancetype)initWithString:(NSString *)aString;
+ (instancetype)stringWithString:(NSString *)string;
  
//通过其他"oc字符串"初始化,带有参数的,可以作为字符串拼接使用
- (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
- (instancetype)initWithFormat:(NSString *)format arguments:(va_list)argList NS_FORMAT_FUNCTION(1,0);
+ (instancetype)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
  
//带有本地话的初始化
- (instancetype)initWithFormat:(NSString *)format locale:(nullable id)locale, ... NS_FORMAT_FUNCTION(1,3);
- (instancetype)initWithFormat:(NSString *)format locale:(nullable id)locale arguments:(va_list)argList NS_FORMAT_FUNCTION(1,0);
+ (instancetype)localizedStringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
//通过其他“oc字符串”直接量初始化
NSString *str = [[NSString alloc] initWithString:@"one"];
NSLog(@"%@", str);
NSString *str2 = [NSString stringWithString:@"one"];
NSLog(@"%@", str2);
  
//输出:
one
one
  
  
//
int age = 18;
NSString *ageStr = [NSString stringWithFormat:@"小明今年%d岁", age];
NSLog(@"%@", ageStr);
  
//输出:
小明今年18岁

c字符串CString

//把c字符串用encoding编码方式转化为OC字符串
- (nullable instancetype)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;
+ (nullable instancetype)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
  
//把c字符串用UTF-8编码方式转化为OC字符串
- (nullable instancetype)initWithUTF8String:(const char *)nullTerminatedCString;
+ (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;
//按照指定编码方式把c字符串转化为oc字符串
const char *cStr = "c string";
NSString *str = [NSString stringWithCString:cStr encoding:NSUTF8StringEncoding];
NSLog(@"%@", str);
  
//输出
c string
  
//如果使用的是NSUnicodeStringEncoding编码方式,输出为:
挠獴物湧
  
  
  
//按照UTF-8编码方式把c字符串转化为oc字符串
const char *cStr = "c string";
NSString *str = [NSString stringWithUTF8String:cStr];
NSLog(@"%@", str);
  
//输出:
c string

通过URLNSURL

通过本地文件file

Java new String

初始化一个的字符串 ""

      String str = "";

通过字符串String

通过字符char UTF-16 code units

通过unicode points代码点

通过字符集 bytes Charset

JS String.from

通过UTF-16 code units

通过code points

小结

不同点

相同点

二、长度 length

三、比较 compare

基本概念

  1. 字典排序: 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0

OC equalcompare

Java equalcompare

JS compare

小结

四、前缀/后缀 hasPrefixhasSuffixstartsWithendsWith

OC hasPrefixhasSuffix

Java startsWithendsWith

JS startsWithendsWith

小结

五、包含 containsincludes

OC contains

Java contains

JS includes

六、拼接/插入 appendinsertconcat

基本概念

OC appendinsertpadding

Java concatformatappendinsert

JS +concatrepeat

小结

七、删除 delete

OC delete

Java delete

JS

小结

八、获取 charcodePointAt

OC characterAtIndex

Java charAtcodePointAt

JS charAtcharCodeAtcodePointAt

小结

九、查找 rangeindexOflastIndexOfsearch

OC range

Java indexOflastIndexOf

JS indexOflastIndexOfsearch

小结

十、替换 replace

OC replace

Java replace

JS replace

小结

十一、截取字符串 sub

OC substring

Java substring

JS substringsubstrslice

小结

十二、大小写 uppercaselowercase

OC uppercaseStringlowercaseStringcapitalizedString

Java toUpperCasetoLowerCase

JS toUpperCasetoLowerCase

小结

十三、过滤 trim

OC trim

Java trim

JS trim

小结

十四、正则表达式 regexmatch

相关知识

OC

详情见 `NSRegularExpression` 类

Java matches

JS match

小结

十五、字符串和其他类型的转化 parsevalueOf

OC

Java valueOf

JS parseIntparseFloattoString+

十六、分割字符串为数组 Separatedsplit

OC Separated

Java split

JS split

小结

十七、编码

OC

概念

编码方式

      typedef NSUInteger NSStringEncoding;
      NS_ENUM(NSStringEncoding) {
          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 */
      };
      
      //常用的:
      NSASCIIStringEncoding : ACII编码,只有0-127个字符
      NSUTF8StringEncoding : UTF-8编码,常用的,1个字节表示code point
      NSUnicodeStringEncoding : Unicode编码,国际统一的,2个字节表示一个code point

其他

      @property (readonly) NSStringEncoding fastestEncoding;        // Result in O(1) time; a rough estimate
      @property (readonly) NSStringEncoding smallestEncoding;       // Result in O(n) time; the encoding in which the string is most compact
      
      @property (class, readonly) const NSStringEncoding *availableStringEncodings;
      @property (class, readonly) NSStringEncoding defaultCStringEncoding;  // Should be rarely used
      
      + (NSString *)localizedNameOfStringEncoding:(NSStringEncoding)encoding;

字节大小

字符串和二进制数据的转化

字符串和c语言字符串的转化

字符串和字节的转化

十八、保存到文件

OC


最后吐槽一下: 这些原先是在notion上进行文章编辑的,后面导出为markdown的时候,有些格式混乱了,so 就变成了上面的样子了。。。

上一篇下一篇

猜你喜欢

热点阅读