Adds utility methods to NSString, for dealing with whitespace, string splitting, and other things.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

NSString+SA_NSStringExtensions.h 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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. typedef NS_OPTIONS(NSUInteger, SA_NSStringTrimmingOptions) {
  30. SA_NSStringTrimming_CollapseWhitespace = 1 << 0,
  31. SA_NSStringTrimming_TrimWhitespace = 1 << 1,
  32. SA_NSStringTrimming_AppendEllipsis = 1 << 2,
  33. SA_NSStringTrimming_ElideEllipsisWhenEmpty = 1 << 3
  34. };
  35. /* “Smart” trimming.
  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. -(NSArray <NSString *> *) componentsSplitByWhitespaceWithMaxSplits:(NSUInteger)maxSplits
  104. dropEmptyString:(BOOL)dropEmptyString;
  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