Adds utility methods to NSString, for dealing with whitespace, string splitting, and other things.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

NSString+SA_NSStringExtensions.h 9.9KB

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