public String expand()

in commons-digester3-core/src/main/java/org/apache/commons/digester3/substitution/MultiVariableExpander.java [80:117]


    public String expand( String str, final String marker, final Map<String, Object> source )
    {
        final String startMark = marker + "{";
        final int markLen = startMark.length();

        int index = 0;
        for ( ;; )
        {
            index = str.indexOf( startMark, index );
            if ( index == -1 )
            {
                return str;
            }

            final int startIndex = index + markLen;
            if ( startIndex > str.length() )
            {
                throw new IllegalArgumentException( "var expression starts at end of string" );
            }

            final int endIndex = str.indexOf( "}", index + markLen );
            if ( endIndex == -1 )
            {
                throw new IllegalArgumentException( "var expression starts but does not end" );
            }

            final String key = str.substring( index + markLen, endIndex );
            final Object value = source.get( key );
            if ( value == null )
            {
                throw new IllegalArgumentException( "parameter [" + key + "] is not defined." );
            }
            final String varValue = value.toString();

            str = str.substring( 0, index ) + varValue + str.substring( endIndex + 1 );
            index += varValue.length();
        }
    }