All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.core.lang.StringFactory Maven / Gradle / Ivy

package com.moon.core.lang;

import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * @author moonsky
 */
public final class StringFactory implements Supplier {

    private String source;

    public StringFactory() { }

    public static StringFactory of(CharSequence source) { return of().with(source); }

    public static StringFactory of() { return new StringFactory(); }

    private StringFactory set(String source) {
        this.source = source;
        return this;
    }

    public StringFactory with(CharSequence source) {
        return set(StringUtil.stringify(source));
    }

    public StringFactory withIfAbsent(CharSequence sequence) {
        return isAbsent() ? with(sequence) : this;
    }

    public StringFactory replace(char old, char replacement) {
        return set(StringUtil.replace(this.source, old, replacement));
    }

    public StringFactory replaceFirst(String old, String replacement) {
        return set(StringUtil.replaceFirst(this.source, old, replacement));
    }

    public StringFactory replaceAll(String old, String replacement) {
        return set(StringUtil.replaceAll(this.source, old, replacement));
    }

    public StringFactory replaceMatched(String regex, String replacement) {
        return set(source == null ? null : source.replaceAll(regex, replacement));
    }

    public StringFactory add(CharSequence sequence) {
        return set(this.source + sequence);
    }

    public StringFactory addNonNull(CharSequence sequence) {
        return sequence == null ? this : add(sequence);
    }

    public boolean isAbsent() { return this.source == null; }

    public boolean isPresent() { return !isAbsent(); }

    public StringFactory use(Consumer consumer) {
        consumer.accept(this.source);
        return this;
    }

    public StringFactory useIfPresent(Consumer consumer) {
        if (isPresent()) {
            consumer.accept(this.source);
        }
        return this;
    }

    @Override
    public String get() { return this.source; }

    @Override
    public boolean equals(Object o) {
        if (this == o) { return true; }
        if (o == null || getClass() != o.getClass()) { return false; }
        StringFactory that = (StringFactory) o;
        return Objects.equals(source, that.source);
    }

    @Override
    public int hashCode() { return Objects.hash(source); }

    @Override
    public String toString() { return String.valueOf(this.source); }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy