ustr

package
v0.0.0-...-76c535a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2021 License: MIT Imports: 7 Imported by: 0

README

ustr

Go programming helpers for common string-processing needs.

Usage

func Concat
func Concat(vals ...string) string

Passes the specified vals to strings.Join.

func ExtractAllIdentifiers
func ExtractAllIdentifiers(src, prefix string) (identifiers []string)

Extracts all "identifiers" (as per ExtractFirstIdentifier) in src and starting with prefix (no duplicates, ordered by occurrence).

func ExtractFirstIdentifier
func ExtractFirstIdentifier(src, prefix string, minPos int) (identifier string)

Extracts the first occurrence (at or after minPos) of the "identifier" starting with prefix in src.

func First
func First(predicate func(s string) bool, step int, vals ...string) string

Returns the first string in vals to match the specified predicate.

step: 1 to test all values, a higher value to skip n values after each test, negative for reverse slice traversal, or use 0 to get stuck in an infinite loop.

func FirstNonEmpty
func FirstNonEmpty(vals ...string) (val string)

Returns the first non-empty string in vals.

func Has
func Has(s, substr string) bool

Convenience short-hand for strings.Contains.

func HasAny
func HasAny(s string, subs ...string) bool

Returns whether s contains any of the specified sub-strings.

func HasAnyCase
func HasAnyCase(s1, s2 string) bool

Returns whether s1 contains s2 or lower-case s1 contains lower-case s2.

func HasAnyPrefix
func HasAnyPrefix(s string, prefixes ...string) bool

Returns whether s starts with any one of the specified prefixes.

func HasAnySuffix
func HasAnySuffix(s string, suffixes ...string) bool

Returns whether s ends with any one of the specified suffixes.

func HasOnce
func HasOnce(str1, str2 string) bool

Returns whether str2 is contained in str1 exactly once.

func Ifm
func Ifm(cond bool, ifTrue, ifFalse map[string]string) map[string]string

Returns ifTrue if cond is true, otherwise returns ifFalse.

func Ifs
func Ifs(cond bool, ifTrue, ifFalse string) string

Returns ifTrue if cond is true, otherwise returns ifFalse.

func IndexAny
func IndexAny(s string, seps ...string) (pos int)

For all seps, records its position of first occurrence in s, then returns the smallest such position.

func IsAscii
func IsAscii(str string) bool

Returns whether str is ASCII-compatible.

func IsLower
func IsLower(s string) bool

Returns whether all unicode.IsLetter runes in s are lower-case.

func IsOneOf
func IsOneOf(s string, all ...string) bool

Returns whether s is in all.

func IsUpper
func IsUpper(s string) bool

Returns whether all unicode.IsLetter runes in s are upper-case.

func IsUpperAscii
func IsUpperAscii(s string) bool
func LettersOnly
func LettersOnly(s string) string

Returns a representation of s with all non-unicode.IsLetter runes removed.

func MatchesAny
func MatchesAny(value string, patterns ...string) bool

Uses a Matcher to determine whether value matches any one of the specified simple-patterns.

func NonEmpties
func NonEmpties(breakAtFirstEmpty bool, vals ...string) (slice []string)

Returns a slice that contains the non-empty items in vals.

func ParseBool
func ParseBool(s string) bool

Returns strconv.ParseBool or false.

func ParseFloat
func ParseFloat(s string) float64

Returns strconv.ParseFloat or 0.

func ParseFloats
func ParseFloats(vals ...string) []float64

Returns the parsed float64s from vals in the same order, or nil if one of them failed to parse.

func ParseInt
func ParseInt(s string) int64

Returns strconv.ParseInt or 0.

func ParseUint
func ParseUint(s string) uint64

Returns strconv.ParseUint or 0.

func Pluralize
func Pluralize(s string) string

A most simplistic (not linguistically-correct) English-language pluralizer that may be useful for code or doc generation.

If s ends with "s", only appends "es": bus -> buses, mess -> messes etc.

If s ends with "y" (but not "ay", "ey", "oy", "uy" or "iy"), removes "y" and appends "ies": autonomy -> autonomies, dictionary -> dictionaries etc.

Otherwise, appends "s": gopher -> gophers, laptop -> laptops etc.

func PrefixWithSep
func PrefixWithSep(prefix, sep, v string) string

Prepends prefix + sep to v only if prefix isn't empty.

func PrependIf
func PrependIf(s, p string) string

Prepends p to s only if s doesn't already have that prefix.

func ReduceSpaces
func ReduceSpaces(s string) string

All occurrences in s of multiple subsequent spaces in a row are collapsed into one single space.

func Replace
func Replace(str string, repls map[string]string) string

Replaces in str all occurrences of all repls hash-map keys with their respective associated (mapped) value.

func SafeIdentifier
func SafeIdentifier(s string) string

Creates a Pascal-cased "identifier" version of the specified string.

func Split
func Split(v, s string) (sl []string)

Returns an empty slice is v is emtpy, otherwise like strings.Split

func StripPrefix
func StripPrefix(val, prefix string) string

Strips prefix off val if possible.

func StripSuffix
func StripSuffix(val, suffix string) string

Strips suffix off val if possible.

func ToLowerIfUpper
func ToLowerIfUpper(s string) string

Returns the lower-case representation of s only if it is currently fully upper-case as per IsUpper.

func ToUpperIfLower
func ToUpperIfLower(s string) string

Returns the upper-case representation of s only if it is currently fully lower-case as per IsLower.

type Buffer
type Buffer struct {
	bytes.Buffer
}

A convenient wrapper for bytes.Buffer.

func (*Buffer) Write
func (me *Buffer) Write(format string, args ...interface{})

Convenience short-hand for bytes.Buffer.WriteString(fmt.Sprintf(format, args...))

func (*Buffer) Writeln
func (me *Buffer) Writeln(format string, args ...interface{})

Convenience short-hand for bytes.Buffer.WriteString(fmt.Sprintf(format+"\n", args...))

type Matcher
type Matcher struct {
}

Matches a string against "simple-patterns": patterns that can have asterisk (*) wildcards only at the beginning ("ends-with"), at the end ("begins-with"), or both ("contains"), or not at all ("equals").

For more complex pattern-matching needs, go forth and unleash the full force of the standard library's regexp package. But I found that in a big portion of pattern-matching use-cases, I'm just doing "begins-or-ends-or-contains-or-equals" testing. Hence the conception of the "simple-pattern".

There is also an alternative Pattern type in this package. Use Matcher to match strings against multiple patterns at once, especially if the patterns don't change often and the matchings occur frequently / repeatedly. In simpler, rarer one-off matchings, Pattern is preferable for simpler "setup-less" matching.

func (*Matcher) AddPatterns
func (me *Matcher) AddPatterns(patterns ...string)

Adds the specified simple-patterns to me.

func (*Matcher) HasWildcardPatterns
func (me *Matcher) HasWildcardPatterns() bool

Returns whether any of the simple-patterns specified for me declares a (usable) *-wildcard.

func (*Matcher) IsMatch
func (me *Matcher) IsMatch(s string) bool

Matches s against all patterns in me.

type Pattern
type Pattern string

An "leaner" alternative to Matcher (see docs for Matcher). This represents a single "simple-pattern" and provides matching methods for one or multiple values.

func (Pattern) AllMatch
func (me Pattern) AllMatch(values ...string) (allMatch bool)

Returns whether all specified values match this simple-pattern.

func (Pattern) AnyMatches
func (me Pattern) AnyMatches(values ...string) (firstMatch string)

Returns the first of the specified values to match this simple-pattern, or empty if none of them match.

func (Pattern) IsMatch
func (me Pattern) IsMatch(value string) bool

Returns whether the specified value matches this simple-pattern.

Documentation

Overview

Go programming helpers for common string-processing needs.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func After

func After(val string, needle string, elseempty bool) string

func AfterLast

func AfterLast(val string, needle string, elseempty bool) string

func AnyOf

func AnyOf(val string, anyof ...string) bool

func Before

func Before(val string, needle string, elseempty bool) string

func BeginsUpper

func BeginsUpper(s string) bool

func Both

func Both(s1 string, join string, s2 string) string

func BreakAt

func BreakAt(val string, index int) (left string, right string)

func BreakOn

func BreakOn(val string, on string) (left string, right string)

func BreakOnLast

func BreakOnLast(val string, on string) (left string, right string)

func Concat

func Concat(vals ...string) string

Passes the specified `vals` to `strings.Join`.

func DistBetween

func DistBetween(val string, needle1 string, needle2 string) int

func ExtractAllIdentifiers

func ExtractAllIdentifiers(src, prefix string) (identifiers []string)

Extracts all "identifiers" (as per `ExtractFirstIdentifier`) in `src` and starting with `prefix` (no duplicates, ordered by occurrence).

func ExtractFirstIdentifier

func ExtractFirstIdentifier(src, prefix string, minPos int) (identifier string)

Extracts the first occurrence (at or after `minPos`) of the "identifier" starting with `prefix` in `src`.

func First

func First(check func(s string) bool, step int, vals ...string) string

Returns the first `string` in `vals` to match the specified `check`.

`step`: 1 to test all values, a higher value to skip n values after each test, negative for reverse slice traversal, or use 0 to get stuck in an infinite loop.

func FirstNonEmpty

func FirstNonEmpty(vals ...string) (val string)

Returns the first non-empty `string` in `vals`.

func FirstRune

func FirstRune(s string) (r rune)

func FromInt

func FromInt(i int) string

func Has

func Has(s, substr string) bool

Convenience short-hand for `strings.Contains`.

func HasAny

func HasAny(s string, subs ...string) bool

Returns whether `s` contains any of the specified sub-strings.

func HasAnyCase

func HasAnyCase(s1, s2 string) bool

Returns whether `s1` contains `s2` or lower-case `s1` contains lower-case `s2`.

func HasAnyPrefix

func HasAnyPrefix(s string, prefixes ...string) bool

Returns whether `s` starts with any one of the specified `prefixes`.

func HasAnySuffix

func HasAnySuffix(s string, suffixes ...string) bool

Returns whether `s` ends with any one of the specified `suffixes`.

func HasOnce

func HasOnce(str1, str2 string) bool

Returns whether `str2` is contained in `str1` exactly once.

func Idx

func Idx(val string, needle string) int

func Ifm

func Ifm(cond bool, ifTrue, ifFalse map[string]string) map[string]string

Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`.

func Ifs

func Ifs(cond bool, ifTrue, ifFalse string) string

Returns `ifTrue` if `cond` is `true`, otherwise returns `ifFalse`.

func IndexAny

func IndexAny(s string, seps ...string) (pos int)

For all `seps`, records its position of first occurrence in `s`, then returns the smallest such position.

func IsAscii

func IsAscii(str string) bool

Returns whether `str` is ASCII-compatible.

func IsLower

func IsLower(s string) bool

Returns whether all `unicode.IsLetter` runes in `s` are lower-case.

func IsOneOf

func IsOneOf(s string, all ...string) bool

Returns whether `s` is in `all`.

func IsUpper

func IsUpper(s string) bool

Returns whether all `unicode.IsLetter` runes in `s` are upper-case.

func IsUpperAscii

func IsUpperAscii(s string) bool

func Join

func Join(vals []string, delim string) string

func LettersOnly

func LettersOnly(s string) string

Returns a representation of `s` with all non-`unicode.IsLetter` runes removed.

func Longest

func Longest(vals ...string) (maxlen int)

func MapEq

func MapEq(m1, m2 map[string]string) bool

func MatchesAny

func MatchesAny(value string, patterns ...string) bool

Uses a `Matcher` to determine whether `value` matches any one of the specified simple-`patterns`.

func N

func N(vals ...string) []string

func NonEmpties

func NonEmpties(breakAtFirstEmpty bool, vals ...string) (slice []string)

Returns a slice that contains the non-empty items in `vals`.

func NotPrefixed

func NotPrefixed(pref string) func(string) bool

func PadRight

func PadRight(s string, ensurelen int) string

func ParseBool

func ParseBool(s string) bool

Returns `strconv.ParseBool` or `false`.

func ParseFloat

func ParseFloat(s string) float64

Returns `strconv.ParseFloat` or `0`.

func ParseFloats

func ParseFloats(vals ...string) []float64

Returns the parsed `float64`s from `vals` in the same order, or `nil` if one of them failed to parse.

func ParseInt

func ParseInt(s string) int64

Returns `strconv.ParseInt` or `0`.

func ParseUint

func ParseUint(s string) uint64

Returns `strconv.ParseUint` or `0`.

func Pluralize

func Pluralize(s string) string

A most simplistic (not linguistically-correct) English-language pluralizer that may be useful for code or doc generation.

If `s` ends with "s", only appends "es": bus -> buses, mess -> messes etc.

If `s` ends with "y" (but not "ay", "ey", "oy", "uy" or "iy"), removes "y" and appends "ies": autonomy -> autonomies, dictionary -> dictionaries etc.

Otherwise, appends "s": gopher -> gophers, laptop -> laptops etc.

func Pref

func Pref(val string, pref string) bool

func PrefixWithSep

func PrefixWithSep(prefix, sep, v string) string

Prepends `prefix + sep` to `v` only if `prefix` isn't empty.

func PrependIf

func PrependIf(s, p string) string

Prepends `p` to `s` only if `s` doesn't already have that prefix.

func ReduceSpaces

func ReduceSpaces(s string) string

All occurrences in `s` of multiple subsequent spaces in a row are collapsed into one single space.

func Replace

func Replace(str string, repls map[string]string) string

Replaces in `str` all occurrences of all `repls` hash-map keys with their respective associated (mapped) value.

func SafeIdentifier

func SafeIdentifier(s string) string

Creates a Pascal-cased "identifier" version of the specified string.

func Split

func Split(v, sep string) (sl []string)

Returns an empty slice is `v` is emtpy, otherwise like `strings.Split`

func SplitOnce

func SplitOnce(v string, sep rune) (left string, right string)

func StripPrefix

func StripPrefix(val, prefix string) string

Strips `prefix` off `val` if possible.

func StripSuffix

func StripSuffix(val, suffix string) string

Strips `suffix` off `val` if possible.

func Suff

func Suff(val string, suff string) bool

func ToInt

func ToInt(s string) (i int)

func ToLowerIfUpper

func ToLowerIfUpper(s string) string

Returns the lower-case representation of `s` only if it is currently fully upper-case as per `IsUpper`.

func ToUpperIfLower

func ToUpperIfLower(s string) string

Returns the upper-case representation of `s` only if it is currently fully lower-case as per `IsLower`.

func Trim

func Trim(val string) string

func Until

func Until(s string, r rune) string

Types

type Buffer

type Buffer struct {
	bytes.Buffer
}

A convenient wrapper for `bytes.Buffer`.

func (*Buffer) Write

func (me *Buffer) Write(format string, args ...interface{})

Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format, args...))`

func (*Buffer) Writeln

func (me *Buffer) Writeln(format string, args ...interface{})

Convenience short-hand for `bytes.Buffer.WriteString(fmt.Sprintf(format+"\n", args...))`

type Matcher

type Matcher struct {
	// contains filtered or unexported fields
}

Matches a string against "simple-patterns": patterns that can have asterisk (*) wildcards only at the beginning ("ends-with"), at the end ("begins-with"), or both ("contains"), or not at all ("equals").

For more complex pattern-matching needs, go forth and unleash the full force of the standard library's `regexp` package. But I found that in a big portion of pattern-matching use-cases, I'm just doing "begins-or-ends-or-contains-or-equals" testing. Hence the conception of the "simple-pattern".

There is also an alternative `Pattern` type in this package. Use `Matcher` to match strings against multiple patterns at once, especially if the patterns don't change often and the matchings occur frequently / repeatedly. In simpler, rarer one-off matchings, `Pattern` is preferable for simpler "setup-less" matching.

func (*Matcher) AddPatterns

func (me *Matcher) AddPatterns(patterns ...string)

Adds the specified simple-`patterns` to me.

func (*Matcher) HasWildcardPatterns

func (me *Matcher) HasWildcardPatterns() bool

Returns whether any of the simple-patterns specified for `me` declares a (usable) *-wildcard.

func (*Matcher) IsMatch

func (me *Matcher) IsMatch(s string) bool

Matches `s` against all patterns in `me`.

type Pattern

type Pattern string

An "leaner" alternative to `Matcher` (see docs for `Matcher`). This represents a single "simple-pattern" and provides matching methods for one or multiple values.

func (Pattern) AllMatch

func (me Pattern) AllMatch(values ...string) (allMatch bool)

Returns whether all specified `values` match this simple-pattern.

func (Pattern) AnyMatches

func (me Pattern) AnyMatches(values ...string) (firstMatch string)

Returns the first of the specified `values` to match this simple-pattern, or empty if none of them match.

func (Pattern) IsMatch

func (me Pattern) IsMatch(value string) bool

Returns whether the specified `value` matches this simple-pattern.

type RuneCaser

type RuneCaser interface {
	Ensure(string, int) string
}
var (
	Lower RuneCaser = &runeLowCaser{}
	Upper RuneCaser = &runeUpCaser{}
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL