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 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