WordUtils.m 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. //
  2. // WordUtils.m
  3. // UUTUtils
  4. //
  5. // Created by zhuge on 2017/12/26.
  6. // Copyright © 2017年 zhuge. All rights reserved.
  7. //
  8. #import "WordUtils.h"
  9. NSString *letters = @"abcdefghijklmnopqrstuvwxyz";
  10. @interface WordUtils()
  11. @property (strong) NSArray *arrKeywords;
  12. @end
  13. @implementation WordUtils
  14. - (instancetype)init
  15. {
  16. self = [super init];
  17. if (self) {
  18. [self reset];
  19. NSString *path = [[NSBundle mainBundle] pathForResource:@"CY_String_keywords" ofType:@"txt"];
  20. NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
  21. self.arrKeywords = [str componentsSeparatedByString:@","];
  22. }
  23. return self;
  24. }
  25. - (void)reset {
  26. self.iCurrentIndex = 1;
  27. self.maUsedKeywords = [NSMutableArray arrayWithCapacity:0];
  28. [self.maUsedKeywords addObject:@"abstract"];
  29. [self.maUsedKeywords addObject:@"assert"];
  30. [self.maUsedKeywords addObject:@"boolean"];
  31. [self.maUsedKeywords addObject:@"break"];
  32. [self.maUsedKeywords addObject:@"byte"];
  33. [self.maUsedKeywords addObject:@"case"];
  34. [self.maUsedKeywords addObject:@"catch"];
  35. [self.maUsedKeywords addObject:@"char"];
  36. [self.maUsedKeywords addObject:@"class"];
  37. [self.maUsedKeywords addObject:@"const"];
  38. [self.maUsedKeywords addObject:@"continue"];
  39. [self.maUsedKeywords addObject:@"default"];
  40. [self.maUsedKeywords addObject:@"do"];
  41. [self.maUsedKeywords addObject:@"double"];
  42. [self.maUsedKeywords addObject:@"else"];
  43. [self.maUsedKeywords addObject:@"enum"];
  44. [self.maUsedKeywords addObject:@"extends"];
  45. [self.maUsedKeywords addObject:@"final"];
  46. [self.maUsedKeywords addObject:@"finally"];
  47. [self.maUsedKeywords addObject:@"float"];
  48. [self.maUsedKeywords addObject:@"for"];
  49. [self.maUsedKeywords addObject:@"goto"];
  50. [self.maUsedKeywords addObject:@"if"];
  51. [self.maUsedKeywords addObject:@"implements"];
  52. [self.maUsedKeywords addObject:@"import"];
  53. [self.maUsedKeywords addObject:@"instanceof"];
  54. [self.maUsedKeywords addObject:@"int"];
  55. [self.maUsedKeywords addObject:@"interface"];
  56. [self.maUsedKeywords addObject:@"long"];
  57. [self.maUsedKeywords addObject:@"native"];
  58. [self.maUsedKeywords addObject:@"new"];
  59. [self.maUsedKeywords addObject:@"package"];
  60. [self.maUsedKeywords addObject:@"private"];
  61. [self.maUsedKeywords addObject:@"protected"];
  62. [self.maUsedKeywords addObject:@"public"];
  63. [self.maUsedKeywords addObject:@"return"];
  64. [self.maUsedKeywords addObject:@"strictfp"];
  65. [self.maUsedKeywords addObject:@"short"];
  66. [self.maUsedKeywords addObject:@"static"];
  67. [self.maUsedKeywords addObject:@"super"];
  68. [self.maUsedKeywords addObject:@"switch"];
  69. [self.maUsedKeywords addObject:@"synchronized"];
  70. [self.maUsedKeywords addObject:@"this"];
  71. [self.maUsedKeywords addObject:@"throw"];
  72. [self.maUsedKeywords addObject:@"throws"];
  73. [self.maUsedKeywords addObject:@"transient"];
  74. [self.maUsedKeywords addObject:@"try"];
  75. [self.maUsedKeywords addObject:@"void"];
  76. [self.maUsedKeywords addObject:@"volatile"];
  77. [self.maUsedKeywords addObject:@"while"];
  78. [self.maUsedKeywords addObject:@"true"];
  79. [self.maUsedKeywords addObject:@"false"];
  80. }
  81. - (NSString *)nextStringFor26Hex {
  82. NSString *ret = @"";
  83. int n = _iCurrentIndex;
  84. while (n > 0) {
  85. int m = n % 26;
  86. if (m == 0) {
  87. m = 26;
  88. }
  89. n = (n - m) / 26;
  90. ret = [NSString stringWithFormat:@"%c%@", (char)(m + 'a' - 1), ret];
  91. }
  92. self.iCurrentIndex++;
  93. return ret;
  94. }
  95. - (NSString *)nextDistinctKeyword {
  96. int notFoundTimes = 0;
  97. NSString *str = _arrKeywords[arc4random() % [_arrKeywords count]];
  98. while ([_maUsedKeywords containsObject:str]) {
  99. // NSLog(@"----------------------repeated");
  100. notFoundTimes++;
  101. if (notFoundTimes > 10) {
  102. str = [NSString stringWithFormat:@"%@_%@", _arrKeywords[arc4random() % [_arrKeywords count]], _arrKeywords[arc4random() % [_arrKeywords count]]];
  103. } else {
  104. str = _arrKeywords[arc4random() % [_arrKeywords count]];
  105. }
  106. }
  107. str = [str lowercaseString];
  108. [_maUsedKeywords addObject:str];
  109. return str;
  110. }
  111. #pragma mark static
  112. +(NSString*) randomStringWithLength:(int) len {
  113. NSMutableString *randomString = [NSMutableString stringWithCapacity:len];
  114. for (int i = 0; i < len; i++) {
  115. [randomString appendFormat:@"%C", [letters characterAtIndex:arc4random() % [letters length]]];
  116. }
  117. return randomString;
  118. }
  119. +(NSString *)randomKeyword {
  120. NSString *path = [[NSBundle mainBundle] pathForResource:@"CY_String_keywords" ofType:@"txt"];
  121. NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
  122. NSArray *arr = [str componentsSeparatedByString:@","];
  123. NSString *keyword = [arr objectAtIndex:arc4random() % [arr count]];
  124. return keyword;
  125. }
  126. + (NSString *)reverse:(NSString *)str {
  127. NSMutableString *reversedString = [NSMutableString stringWithCapacity:[str length]];
  128. [str enumerateSubstringsInRange:NSMakeRange(0,[str length])
  129. options:(NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences)
  130. usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
  131. [reversedString appendString:substring];
  132. }];
  133. return reversedString;
  134. }
  135. + (NSString *)urlEncode:(NSString *)str {
  136. // NSString *encoded = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
  137. // NULL,
  138. // (CFStringRef)str,
  139. // NULL,
  140. // (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
  141. // kCFStringEncodingUTF8 ));
  142. NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"!*'\"();:@&=+$,/?%#[]% "];
  143. NSString *encoded = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
  144. return encoded;
  145. }
  146. + (NSString *)stringByTrimHTML:(NSString *)str {
  147. str = [str stringByReplacingOccurrencesOfString:@" <br>" withString:@"<br>"];
  148. str = [str stringByReplacingOccurrencesOfString:@"<br>" withString:@"\n"];
  149. NSRange r;
  150. NSString *s = [str copy];
  151. while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
  152. s = [s stringByReplacingCharactersInRange:r withString:@""];
  153. return s;
  154. }
  155. + (NSString *)trimSpaceOfString:(NSString *)str {
  156. return [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
  157. }
  158. + (NSString *)removeAllSuffix:(NSString *)suffix ofString:(NSString *)string {
  159. NSString *ret = [NSString stringWithString:string];
  160. while ([ret hasSuffix:suffix]) {
  161. ret = [ret substringToIndex:[ret length] - [suffix length]];
  162. }
  163. return ret;
  164. }
  165. + (NSString *)removeAllPrefix:(NSString *)prefix ofString:(NSString *)string {
  166. NSString *ret = [NSString stringWithString:string];
  167. while ([ret hasPrefix:prefix]) {
  168. ret = [ret substringFromIndex:[prefix length]];
  169. }
  170. return ret;
  171. }
  172. @end