string-utils
TOC »
Documentation
Memoized String
Usage
(import memoized-string)make-string+
- make-string+ COUNT #!optional FILLprocedure
An interning make-string.
FILL is any valid char, including codepoints outside of the ASCII range, which produce UTF-8 strings.
string+
- string+ #!optional CHAR...procedure
An interning string.
CHAR is any valid char, including codepoints outside of the ASCII range, which produce UTF-8 strings.
global-string
- global-string STRprocedure
Share common string space.
String Hexadecimal
Usage
(import string-hexadecimal)string->hex
- string->hex STRING #!optional START ENDprocedure
Returns a hexadecimal string (Latin1) from STRING (Latin1). START and END are substring limits.
STRING is treated as a string of bytes.
hex->string
- hex->string STRING #!optional START ENDprocedure
Returns the string (Latin1) from a hexadecimal STRING (Latin1). START and END are substring limits.
utf8->hex
- utf8->hex STRING #!optional START ENDprocedure
Returns a hexadecimal string (Latin1) from STRING (Utf8). START and END are substring limits.
STRING is treated as a string of bytes.
hex->utf8
- hex->string STRING #!optional START ENDprocedure
Returns the string (Utf8) from a hexadecimal STRING (Latin1). START and END are substring limits.
String Utilities
Usage
(import string-utils)string-split-chars
- string-split-chars STR #!optional DELIMITERSprocedure
Returns a list of substrings of STR & a list of the characters, from DELIMITERS, separating those substrings.
- STR
- string ; version string.
- DELIMITERS
- string ; string of version component delimiter characters, default ".,".
(string-split-chars "a.2,c" "$,.") ;=> ("a" "2" "c") (#\. #\,)
string-unzip
- string-unzip STR #!optional DELIMITERSprocedure
Returns a list of substrings of STR & a list of the delimiters, from DELIMITERS, separating those substrings.
- STR
- string ; version string.
- DELIMITERS
- string ; string of version component delimiter characters, default ".,".
(string-unzip "a.2,c" "$,.") ;=> ("a" "2" "c") ("." ",")
string-zip
- string-zip PARTS PUNCSprocedure
Returns a string formed from the concatenation of the PARTS and the interspersion of the PUNCS.
- PARTS
- (list-of string) ; version components.
- PUNCS
- (list-of string) ; version component separators.
(string-zip ("a" "2" "c") ("." ",")) ;=> "a.2,c"
string-trim-whitespace-both
- string-trim-whitespace-both Sprocedure
Returns the string S with whitespace trimmed.
list-as-string
- list-as-string LSprocedure
Returns the list LS written to a string.
number->padded-string
- number->padded-string N WIDTH #!optional PADCHAR BASEprocedure
- N
- number ; source
- WIDTH
- fixnum ; field width
- PADCHAR
- char ; padding character
- BASE
- fixnum ; number conversion base
string-fixed-length
- (string-fixed-length S N [pad-char: #\space] [trailing: "..."]) -> stringprocedure
Returns the string S with the string-length fixed to N.
A shorter string is padded. A longer string is truncated, & suffixed with the trailing.
string-subsequence?
- string-subsequence? S Tprocedure
Returns whether the characters of S occur in order thru T.
string-longest-common-prefix
- string-longest-common-prefix STRINGSprocedure
Returns the longest comment prefix of STRINGS.
- STRINGS
- (list-of string)
string-longest-common-suffix
- string-longest-common-suffix STRINGSprocedure
Returns the longest comment suffix of STRINGS.
- STRINGS
- (list-of string)
string-longest-prefix
- string-longest-prefix CANDIDATE OTHERSprocedure
Returns the member with the longest comment prefix of CANDIDATE from OTHERS, or #f.
- CANDIDATE
- string
- OTHERS
- (list-of string)
string-longest-suffix
- string-longest-suffix CANDIDATE OTHERSprocedure
Returns the member with the longest comment suffix of CANDIDATE from OTHERS, or #f.
- CANDIDATE
- string
- OTHERS
- (list-of string)
String Interpolation
Extends the read-syntax with #"..." where tagged scheme expressions in the string are evaluated at runtime:
#"@ #(+ 1 2)## (#'and #1 #2) = #(and 1 2) trailing #" ;=> "@ 3# (and 1 2) = 2 trailing #"
Similar to the #<# multi-line string.
See Multiline String Constant with Embedded Expressions.
Note Support for the #{<sexpr>} subform is dropped. So SRFI 105 can work as expected:
(import (srfi-105 extra)) #"1 + 3 = #{1 + 3}" ;=> "1 + 3 = 4" #"An \"#{string-append(\"Hello, \" \"World\")}\" example" ;=> "An \"Hello, World\" example"
Usage
(import string-interpolation)Compiler Command-Line
csc -extend string-interpolation ...
Interpreter Command-Line
csi -require-extension string-interpolation ...
Activates string-interpolation #"..." syntax.
String Interpolation Syntax
Usage
(import string-interpolation-syntax)set-sharp-string-interpolation-syntax
- set-sharp-string-interpolation-syntax PROCprocedure
Extends the read-syntax with #"..." where the "..." is evaluated using (PROC "...").
- PROC
- #f ; read-syntax is cleared.
- PROC
- #t ; PROC is identity.
- PROC
- procedure ; interpolation function.
String Interpolator
Usage
(import string-interpolator)string-interpolate
- (string-interpolate STR [eval-tag: EVAL-TAG]) -> listprocedure
Performs substitution of embedded Scheme expressions, prefixed with EVAL-TAG. Two consecutive EVAL-TAGs are translated to a single EVAL-TAG. A trailing EVAL-TAG is taken literally.
- STR
- string.
- EVAL-TAG
- character, default #\#.
String Wrap
Usage
(import string-wrap)line-break
- line-break STR WID #!optional SPACES SPACEprocedure
Returns the wrapped substrings from the text STR, each less-than or equal to the line width WID. Breaks the line at a SPACES delimiter, with any splicing performed using the SPACE delimiter.
The default is (string #\space).
Irregex Utils
Usage
(import string-irregex-utils)irregex-match-submatches
- irregex-match-submatches MATCHprocedure
Returns a list of the match substrings.
- MATCH
- regexp-match
irregex-submatch
- irregex-submatch IRX STR #!optional IDX START ENDprocedure
Returns the indexed, IDX, match substring, or false when no match.
- IRX
- (or string sre regexp) ; pattern.
- STR
- string ; target.
- IDX
- fixnum ; which submatch, default 1.
- START
- fixnum ; target string start index, default 0.
- END
- fixnum ; target string end index, default (string-length STR).
irregex-submatches
- irregex-submatches IRX STR #!optional START ENDprocedure
Returns the matching substrings, or false when no matches.
- IRX
- (or string sre regexp) ; pattern.
- STR
- string ; target.
- START
- fixnum ; target string start index, default 0.
- END
- fixnum ; target string end index, default (string-length STR).
irregex-matches
- irregex-matches IRX STR #!optional START ENDprocedure
Returns all matches, unanchored, in the target string, STR.
- IRX
- (or string sre regexp) ; pattern.
- STR
- string ; target.
- START
- fixnum ; target string start index, default 0.
- END
- fixnum ; target string end index, default (string-length STR).
irregex-replaces
- irregex-replaces STR REPLACES #!optional ALL?procedure
- REPLACES
- (list-of (pair IRX RPLCS)) ;
- RPLCS
- see irregex-replace
(irregex-replaces "Now is the time for all good men." '(("[aei]" "@") ("[ou]" "_")) #t) ;=> "N_w @s th@ t@m@ f_r @ll g__d m@n."
Rabin Karp String Search
Usage
(import rabin-karp)make-string-search
- make-string-search STRINGS #!optional COMPARE HASHprocedure
- STRINGS
- (list-of string) ;
- COMPARE
- (string string --> boolean) ;
- HASH
- (string [BOUNDS []]) ; SRFI-69 hash procedure.
- SEARCHER
- (string [START [END]]) --> RESULT
- RESULT
- (or #f (STRING . (START . END))) ; success or failure result
collect-string-search
- collect-string-search SEARCHER TARGETprocedure
Perform exhaustive search of the TARGET, returing a list of RESULT.
- SEARCHER
- from make-string-search
- TARGET
- string ; search within
- RESULT
- (or #f (STRING . (START . END))) ; success or failure result
Hexadecimal Procedures
Usage
(import to-hex)OUT is a bytevector of length >= (+ LEN 2).
OFF is the byte offset.
LEN is the length of the bytes at OFF.
str_to_hex
- str_to_hex OUT IN OFF LENprocedure
Writes the hexadecimal string (Latin1) of IN to OUT.
IN is a nonnull-string (Latin1).
utf8_to_hex
- utf8_to_hex OUT IN OFF LENprocedure
IN is a nonnull-string (Utf8).
bv_to_hex
- bv_to_hex OUT IN OFF LENprocedure
IN is a nonnull-blob.
u8vec_to_hex
- u8vec_to_hex OUT IN OFF LENprocedure
IN is a nonnull-u8vector.
s8vec_to_hex
- s8vec_to_hex OUT IN OFF LENprocedure
IN is a nonnull-s8vector.
mem_to_hex
- mem_to_hex OUT IN OFF LENprocedure
IN is a nonnull-c-pointer.
hex_to_str
- hex_to_str OUT IN OFF LENprocedure
Parses the hexadecimal string (Latin1) of IN as a string (Latin1).
hex_to_utf8
- hex_to_utf8 OUT IN OFF LENprocedure
Parses the hexadecimal string (Latin1) of IN as a string (Utf8).
hex_to_bv
- hex_to_bv OUT IN OFF LENprocedure
Parses the hexadecimal string (Latin1) of IN as a bytevector.
Requirements
srfi-1 srfi-13 srfi-14 srfi-69 check-errors miscmacros
Author
Version history
- 3.4.2
- Pre-compile irregex-matches irx argument.
- 3.4.1
- Fix irregex-submatch return type.
- 3.4.0
- Add line-break optional delimiters. Add string-irregex-utils.
- 3.3.0
- Faster hex_to_....
- 3.2.0
- Less consing w/ string-hexadecimal.
- 3.1.0
- Add string-wrap.
- 3.0.0
- C6 release.
License
Copyright (C) 2010-2026 Kon Lovett. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICESLOSS OF USE, DATA, OR PROFITSOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.