import java.nio.charset.Charset;
import java.util.*;

class A {
    void constructors(String s) throws Exception {
        new String();

        new String("original");
        new String(s);
        new String(s).length();

        new String(new char[] {'a', 'b', 'c'});
        new String(new char[] {'b', 'd'}, 1, 1);
        new String(new int[] {32, 65, 127}, 0, 3);

        byte[] bytes = new byte[] {32, 65, 100, 81};
        Charset charset = Charset.forName("utf-8");
        new String(bytes);
        new String(bytes, charset);
        new String(bytes, 0, 2);
        new String(bytes, "utf-8");
        new String(bytes, 0, 2, "utf-8");
        new String(bytes, 0, 2, charset);

        new String(new StringBuilder("content"));
        new String(new StringBuffer("content"));
    }

    void normalMethods() {
        String s = "test string";
        s.length();
        s.isEmpty();
        s.charAt(1);
        s.codePointAt(2);
        s.codePointBefore(2);
        s.codePointCount(0, s.length());
        s.offsetByCodePoints(0, 4);
        s.compareTo("test 2");
        s.contains("seq");
        s.contentEquals(new StringBuilder(s));
        s.contentEquals(new StringBuffer(s));
        s.endsWith("ng");
        s.startsWith("te");
        s.startsWith("st", 2);
        s.indexOf("st");
        s.indexOf("st", 5);
        s.indexOf('t');
        s.indexOf('t', 5);
        s.indexOf(32);
        s.indexOf(32, 2);
        s.lastIndexOf("st");
        s.lastIndexOf("st", 4);
        s.lastIndexOf('t');
        s.lastIndexOf('t', 5);
        s.lastIndexOf(32);
        s.lastIndexOf(32, 2);
        s.substring(1);
        s.substring(0, 4);
        s.subSequence(0, 4);
        s.replace('e', 'i');
        s.replace("est", "oast");
        s.intern();
        s.toLowerCase();
        s.toLowerCase(Locale.FRENCH);
        s.toUpperCase();
        s.toUpperCase(Locale.FRENCH);
        s.toString();
        s.toCharArray();
    }

    void specialMethods() throws Exception {
        String s = "test string";
        s.equals("test");
        s.equalsIgnoreCase(
                "tesT"
        );
        s.compareToIgnoreCase("Test");
        s.regionMatches(
                true,
                0,
                "TE",
                0,
                2
        );
        s.regionMatches(0, "st", 1, 2);
        s.replaceAll("\\w+", "---")
                .replaceFirst("([s-t])", "A$1");
        useSplit(s.split("\\s+"));
        useSplit(s.split("\\s+", 0));
        useSplit(s.split("\\s+", -1));
        useSplit(s.split("\\s+", 2));
        String pattern = "\\s+";
        useSplit(s.split(pattern));
        int limit = 5;
        useSplit(s.split("\\s+", limit));
        useSplit(s.split("\\s+", (limit + 5)));
        s.matches("\\w+");
        s.trim();
        s.strip();
        s.stripLeading();
        s.stripTrailing();
        s.concat(" another");

        s.getBytes();
        s.getBytes(Charset.forName("utf-8"));
        s.getBytes("utf-8");

        char[] chars = new char[10];
        s.getChars(1, 11, chars, 0);
    }

    void staticMethods() {
        String.valueOf(1);
        String.valueOf(1L);
        String.valueOf('a');
        String.valueOf(true);
        String.valueOf(1.11F);
        String.valueOf(3.14);
        String.valueOf(new Object());

        int i = 0;
        String.valueOf(++i);
        String.valueOf(i++);
        String.valueOf(1 + 1);

        String.format(
                Locale.FRENCH,
                "Je ne mange pas %d jours",
                6
        );
        String.format("Operation completed with %s", "success");

        char[] chars = {'a', 'b', 'c'};
        String.valueOf(chars);
        String.valueOf(chars, 1, 2);
        String.copyValueOf(chars);
        String.copyValueOf(chars, 1, 2);

        Comparator<String> order = String.CASE_INSENSITIVE_ORDER;
    }

    void useSplit(String[] result) {
    }
}