[racket-dev] Are There More String Functions?
Yesterday, Sam Tobin-Hochstadt wrote:
> I think `racket/string' should provide the useful string functions,
> rather than refer users to srfis. The only srfi/13 function I ever
> use is `string-trim-both' -- any objection to adding that to
> `racket/string'?
+1 for this in general, and since the `trim' function is the one that
usually leads to this question, it makes sense to add it. I have most
done of that now. Some observations:
* Looking around, there are two kinds of "customizations" -- the
characters that are removed, and which side to remove from (usually
in the form of three functions). I'm going with a single
`string-trim' function with an optional regexp for the first and
`#:left?' and `#:right' keywords for the latter.
* It's possible to go with other ways to specify characters, up to
srfi-13's use of srfi-14, and this is part of why I didn't add a
trim function yet. I now think that it's best to have something
that is usually useful (which is by far "just whitespaces") and be
done with it. If you need one of these sophisticated things, the
`regexp-replace' way is still easy enough.
* Another point is the best way to run it efficiently. There was a
largish discussion a while ago about various ways to do that (and I
happened to have gone through a bunch of options shortly before that
too). See also
http://blog.stevenlevithan.com/archives/faster-trim-javascript
for an overview of options in JS.
So in the same spirit as above, I'm just doing something that works
reasonably well. (Again, assuming that if speed is really
important, then you probably have a good idea on the strings that
you're trimming and you can just do whatever works for you
directly.)
* Finally, I'm also adding a related function:
`string-normalize-spaces', which takes a string and a regexp for the
spaces, and turns all spaces into single ones. Same principles as
above. This one is getting a `#:trim?' keyword that says whether
spaces at the edges should be dropped (the default) or normalized.
BTW, I hate that name -- it makes the `string-' prefix looks even
uglier... Any suggestions for a better name?
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!