/**
 * 
 */
package com.baeldung.string;

/**
 * @author swpraman
 *
 */
public class AppendCharAtPositionX {
    
    public String addCharUsingCharArray(String str, char ch, int position) {
        validate(str, position);
        int len = str.length();
        char[] updatedArr = new char[len + 1];
        str.getChars(0, position, updatedArr, 0);
        updatedArr[position] = ch;
        str.getChars(position, len, updatedArr, position + 1);
        return new String(updatedArr);
    }

    public String addCharUsingSubstring(String str, char ch, int position) {
        validate(str, position);
        return str.substring(0, position) + ch + str.substring(position);
    }

    public String addCharUsingStringBuilder(String str, char ch, int position) {
        validate(str, position);
        StringBuilder sb = new StringBuilder(str);
        sb.insert(position, ch);
        return sb.toString();
    }
    
    private void validate(String str, int position) {
        if (str == null) {
            throw new IllegalArgumentException("Str should not be null");
        }
        int len = str.length();
        if (position < 0 || position > len) {
            throw new IllegalArgumentException("position[" + position + "] should be " 
                            + "in the range 0.." + len + " for string " + str);
        }
    }

}
