Adds utility methods to NSString, for dealing with whitespace, string splitting, and other things.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

NSString+SA_NSStringExtensions.h 9.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. //
  2. // NSString+SA_NSStringExtensions.h
  3. // RPGBot
  4. //
  5. // Created by Said Achmiz on 12/31/15.
  6. //
  7. //
  8. #import <Foundation/Foundation.h>
  9. /********************************************************/
  10. #pragma mark - SA_NSStringExtensions category declaration
  11. /********************************************************/
  12. @interface NSString (SA_NSStringExtensions)
  13. /******************************/
  14. #pragma mark - Class properties
  15. /******************************/
  16. @property (class) BOOL SA_NSStringExtensions_RaiseRegularExpressionCreateException;
  17. /*************************************/
  18. #pragma mark - Working with characters
  19. /*************************************/
  20. /* Testing for occurrences of specified characters.
  21. */
  22. -(BOOL) containsCharactersInSet:(NSCharacterSet *)characters;
  23. -(BOOL) containsCharactersInString:(NSString *)characters;
  24. /* Removing occurrences of specified characters.
  25. */
  26. -(NSString *) stringByRemovingCharactersInSet:(NSCharacterSet *)characters;
  27. -(NSString *) stringByRemovingCharactersInString:(NSString *)characters;
  28. /**********************/
  29. #pragma mark - Trimming
  30. /**********************/
  31. /* “Smart” trimming.
  32. */
  33. typedef NS_OPTIONS(NSUInteger, SA_NSStringTrimmingOptions) {
  34. SA_NSStringTrimming_CollapseWhitespace = 1 << 0,
  35. SA_NSStringTrimming_TrimWhitespace = 1 << 1,
  36. SA_NSStringTrimming_AppendEllipsis = 1 << 2,
  37. SA_NSStringTrimming_ElideEllipsisWhenEmpty = 1 << 3
  38. };
  39. -(NSString *) stringByTrimmingToMaxLengthInBytes:(NSUInteger)maxLengthInBytes
  40. usingEncoding:(NSStringEncoding)encoding
  41. withStringEnumerationOptions:(NSStringEnumerationOptions)enumerationOptions
  42. andStringTrimmingOptions:(SA_NSStringTrimmingOptions)trimmingOptions;
  43. /******************************************************************************/
  44. /* Construct trimmed and cleaned string from component dictionary array.
  45. *
  46. * Component dictionary keys:
  47. *
  48. * value
  49. * The string value of the component.
  50. *
  51. * appendFormat (optional)
  52. * A format string, with exactly one format specifier, which must be
  53. * ‘%@’; this will be replaced with the string value.
  54. *
  55. * priority
  56. * Priority. Lower values mean higher priority. Must be an integer.
  57. * (Equal-priority components are NOT guaranteed to be trimmed in
  58. * array order.)
  59. *
  60. * limit (optional)
  61. * Individual length limit for the given component. If present, the
  62. * string value (NOT the full formatted component!) will be trimmed to
  63. * the given length limit *before* the components are formatted and
  64. * combined.
  65. *
  66. * trimBy (optional)
  67. * Wrapped NSStringEnumerationOptions flags value. Specifies the unit
  68. * by which to trim (character, word, etc.) Components without a value
  69. * for this key are not trimmed, only (if need be) removed entirely.
  70. * NOTE: This means that if you specify a value for they ‘limit’ key,
  71. * you MUST specify a value for this key also, otherwise the limit
  72. * will be ignored!)
  73. ******************************************************************************/
  74. +(instancetype) trimmedStringFromComponents:(NSArray <NSDictionary *> *)components
  75. maxLength:(NSUInteger)maxLengthInBytes
  76. encoding:(NSStringEncoding)encoding
  77. cleanWhitespace:(BOOL)cleanWhitespace;
  78. /****************************************/
  79. #pragma mark - Partitioning by whitespace
  80. /****************************************/
  81. /* Finding runs of whitespace.
  82. */
  83. -(NSRange) firstWhitespaceAfterRange:(NSRange)aRange;
  84. -(NSRange) firstNonWhitespaceAfterRange:(NSRange)aRange;
  85. -(NSRange) lastWhitespaceBeforeRange:(NSRange)aRange;
  86. -(NSRange) lastNonWhitespaceBeforeRange:(NSRange)aRange;
  87. /********************/
  88. #pragma mark - Ranges
  89. /********************/
  90. /* Range manipulation.
  91. */
  92. -(NSRange) rangeAfterRange:(NSRange)aRange;
  93. -(NSRange) rangeFromEndOfRange:(NSRange)aRange;
  94. -(NSRange) rangeToEndFrom:(NSRange)aRange;
  95. @property (readonly) NSRange startRange;
  96. @property (readonly) NSRange fullRange;
  97. @property (readonly) NSRange endRange;
  98. /***********************/
  99. #pragma mark - Splitting
  100. /***********************/
  101. /* Splitting by whitespace.
  102. */
  103. -(NSArray <NSString *> *) componentsSplitByWhitespace;
  104. -(NSArray <NSString *> *) componentsSplitByWhitespaceWithMaxSplits:(NSUInteger)maxSplits;
  105. /* Splitting by specified delimiter string.
  106. */
  107. -(NSArray <NSString *> *) componentsSeparatedByString:(NSString *)separator
  108. maxSplits:(NSUInteger)maxSplits;
  109. -(NSArray <NSString *> *) componentsSeparatedByString:(NSString *)separator
  110. dropEmptyString:(BOOL)dropEmptyString;
  111. /***************************/
  112. #pragma mark - Byte encoding
  113. /***************************/
  114. /* Convenience method; alias for lengthOfBytesUsingEncoding:NSUTF8StringEncoding.
  115. */
  116. @property (readonly) NSUInteger UTF8length;
  117. /* Convenience method; alias for dataWithEncoding:NSUTF8StringEncoding.
  118. */
  119. @property (nonatomic, readonly) NSData *dataAsUTF8;
  120. /* Convenience method; alias for [[foo alloc] initWithData:data encoding:encoding].
  121. */
  122. +(instancetype) stringWithData:(NSData *)data
  123. encoding:(NSStringEncoding)encoding;
  124. /* Convenience method; alias for stringWithData:data encoding:NSUTF8StringEncoding.
  125. */
  126. +(instancetype) stringWithUTF8Data:(NSData *)data;
  127. /*********************/
  128. #pragma mark - Hashing
  129. /*********************/
  130. /* MD5 hashing.
  131. */
  132. @property (nonatomic, readonly) NSString *MD5Hash;
  133. /***********************/
  134. #pragma mark - Sentences
  135. /***********************/
  136. /* Get first sentence.
  137. */
  138. @property (nonatomic, readonly) NSString *firstSentence;
  139. /*********************/
  140. #pragma mark - Padding
  141. /*********************/
  142. /* Left-pad.
  143. */
  144. -(NSString *) stringLeftPaddedTo:(int)width;
  145. /****************************************************/
  146. #pragma mark - Regular expression convenience methods
  147. /****************************************************/
  148. -(NSRegularExpression *) regularExpression;
  149. -(NSRegularExpression *) regularExpressionWithOptions:(NSRegularExpressionOptions)options;
  150. -(NSArray <NSString *> *) matchesForRegex:(NSRegularExpression *)regex;
  151. -(NSArray <NSArray <NSString *> *> *) allMatchesForRegex:(NSRegularExpression *)regex;
  152. -(NSArray <NSString *> *) matchesForRegexPattern:(NSString *)pattern;
  153. -(NSArray <NSString *> *) matchesForRegexPattern:(NSString *)pattern
  154. options:(NSRegularExpressionOptions)options;
  155. -(NSArray <NSArray <NSString *> *> *) allMatchesForRegexPattern:(NSString *)pattern;
  156. -(NSArray <NSArray <NSString *> *> *) allMatchesForRegexPattern:(NSString *)pattern
  157. options:(NSRegularExpressionOptions)options;
  158. -(NSString *) stringByReplacingFirstOccurrenceOfPattern:(NSString *)pattern
  159. withTemplate:(NSString *)replacement;
  160. -(NSString *) stringByReplacingFirstOccurrenceOfPattern:(NSString *)pattern
  161. withTemplate:(NSString *)replacement
  162. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  163. matchingOptions:(NSMatchingOptions)matchingOptions;
  164. -(NSString *) stringByReplacingAllOccurrencesOfPattern:(NSString *)pattern
  165. withTemplate:(NSString *)replacement;
  166. -(NSString *) stringByReplacingAllOccurrencesOfPattern:(NSString *)pattern
  167. withTemplate:(NSString *)replacement
  168. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  169. matchingOptions:(NSMatchingOptions)matchingOptions;
  170. -(NSString *) stringByReplacingAllOccurrencesOfPatterns:(NSArray <NSString *> *)patterns
  171. withTemplates:(NSArray <NSString *> *)replacements;
  172. -(NSString *) stringByReplacingAllOccurrencesOfPatterns:(NSArray <NSString *> *)patterns
  173. withTemplates:(NSArray <NSString *> *)replacements
  174. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  175. matchingOptions:(NSMatchingOptions)matchingOptions;
  176. @end
  177. /**************************************************************************/
  178. #pragma mark - SA_NSStringExtensions category declaration (NSMutableString)
  179. /**************************************************************************/
  180. @interface NSMutableString (SA_NSStringExtensions)
  181. /*************************************/
  182. #pragma mark - Working with characters
  183. /*************************************/
  184. /* Removing occurrences of specified characters.
  185. */
  186. -(void) removeCharactersInSet:(NSCharacterSet *)characters;
  187. -(void) removeCharactersInString:(NSString *)characters;
  188. /**********************/
  189. #pragma mark - Trimming
  190. /**********************/
  191. /* “Smart” trimming.
  192. */
  193. -(void) trimToMaxLengthInBytes:(NSUInteger)maxLengthInBytes
  194. usingEncoding:(NSStringEncoding)encoding
  195. withStringEnumerationOptions:(NSStringEnumerationOptions)enumerationOptions
  196. andStringTrimmingOptions:(SA_NSStringTrimmingOptions)trimmingOptions;
  197. /*********************/
  198. #pragma mark - Padding
  199. /*********************/
  200. /* Left-pad.
  201. */
  202. -(void) leftPadTo:(int)width;
  203. /****************************************************/
  204. #pragma mark - Regular expression convenience methods
  205. /****************************************************/
  206. -(void) replaceFirstOccurrenceOfPattern:(NSString *)pattern
  207. withTemplate:(NSString *)replacement;
  208. -(void) replaceFirstOccurrenceOfPattern:(NSString *)pattern
  209. withTemplate:(NSString *)replacement
  210. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  211. matchingOptions:(NSMatchingOptions)matchingOptions;
  212. -(void) replaceAllOccurrencesOfPattern:(NSString *)pattern
  213. withTemplate:(NSString *)replacement;
  214. -(void) replaceAllOccurrencesOfPattern:(NSString *)pattern
  215. withTemplate:(NSString *)replacement
  216. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  217. matchingOptions:(NSMatchingOptions)matchingOptions;
  218. -(void) replaceAllOccurrencesOfPatterns:(NSArray <NSString *> *)patterns
  219. withTemplates:(NSArray <NSString *> *)replacements;
  220. -(void) replaceAllOccurrencesOfPatterns:(NSArray <NSString *> *)patterns
  221. withTemplates:(NSArray <NSString *> *)replacements
  222. regularExpressionOptions:(NSRegularExpressionOptions)regexpOptions
  223. matchingOptions:(NSMatchingOptions)matchingOptions;
  224. @end