public String build() {
        if (locus == null && tree.isEmpty()) {
            throw new IllegalStateException("must call locus(String) or allele(String) at least once");
        }
        if (tree.isEmpty()) {
            return locus;
        }
        String glstring = tree.toString();
        char last = glstring.charAt(glstring.length() - 1);
        if (operators.matches(last)) {
            throw new IllegalStateException("last element of a glstring must not be an operator, was " + last);
        }
        return glstring;
    }
public String build ( ) { if ( locus == null && tree . isEmpty ( ) ) { throw new IllegalStateException ( "must call locus(String) or allele(String) at least once" ) ; } if ( tree . isEmpty ( ) ) { return locus ; } String glstring = tree . toString ( ) ; char last = glstring . charAt ( glstring . length ( ) - 1 ) ; if ( operators . matches ( last ) ) { throw new IllegalStateException ( "last element of a glstring must not be an operator, was " + last ) ; } return glstring ; }
Build and return a new GL String configured from the properties of this GL String builder.

@return a new GL String configured from the properties of this GL String builder
@throws IllegalStateException if {@link #locus(String)} or {@link #allele(String)} has not been called at least once
@throws IllegalStateException if the last call was an operator ({@link #allelicAmbiguity()}, {@link #inPhase()},
{@link #plus()}, {@link #genotypicAmbiguity()}, and {@link #locus(String)})