Skip to content

Readable String Manipulation with Google Mug

Ben Yu edited this page Apr 11, 2024 · 14 revisions

This library provides easy-to-read string manipulation utils. Some examples:

Match and Extract

new StringFormat("/{user}-home/{year}/{month}/{day}")
    .parse(path, (user, year, month, day) -> ...);

Scan and Collect

String input = "I have [k1:v1] and [k2:v2] etc.";
// Returns Map.of("k1", "v1", "k2", "v2")
Map<String, String> keyValues =
    new StringFormat("[{key}:{value}]")
        .scanAndCollectFrom(input, Collectors::toMap);

Replace

// replace file extension name
Substring.last('.').toEnd().replaceFrom(filename, ".yaml");

Remove

// remove the scheme from a url
Substring.upToIncluding(first("://")).removeFrom(url);

Parse a date time string (no pattern string required)

// Parse the datetime string read from a file
List<String> lines = readLinesFromTestFile(...);
StringFormat lineFormat =
    new StringFormat("{time}, {event_id}, {event_type}");
var results = lines.stream()
    .map(line ->
        lineFormat.parseOrThrow(line, (time, id, type) -> {
          ZonedDateTime dateTime = DateTimeFormats.parseZonedDateTime(time);
          ...
        }))
    .collect(toList());

See javadoc for details.

Mug is a general purpose library. Omitted, but other useful utils include BiStream for streaming pairs, Optionals, String Templating, simplified structured concurrency etc.