Search code examples
javacapitalize

Java string capitalize and fix errors


I want to check my string to capitalize errors.(Have 16.000+ line) And some lines have capitalize error. If special characters(?, !, . etc..) after character start with lowercase or word have some uppercase character. (Strings have turkish characters)

Target string;

iki oRDu Eskihisar'da karşılaştı ve Orhan Gazi, Bizanslıları denize dÖkErek büyük bir zafer kazandı. osmanlılar 1331'de İznik'i, 1337'de İzmit'i topraklarına kattı! izmit'in fethedilmesiyle Bizans'ın Anadolu'daki varlığı Son buldu.

I want this;

İki ordu Eskihisar'da karşılaştı ve Orhan Gazi, Bizanslıları denize dökerek büyük bir zafer kazandı. Osmanlılar 1331'de İznik'i, 1337'de İzmit'i topraklarına kattı! İzmit'in fethedilmesiyle Bizans'ın Anadolu'daki varlığı son buldu.

When i was use StringUtils.capitalize(org.apache library) doesnt work when turkish character...

I can do this in java?


Solution

  • StringUtils.capitalize is not the right candidate for you as If you have a capital letter in the middle of the word, it will remain in capital letter which is not what you want obviously.

    Here is how it could be implemented:

    int length = value.length();
    StringBuilder buffer = new StringBuilder(length);
    boolean sentence = false;
    boolean space = false;
    for (int i = 0; i < length; i++) {
        char c = value.charAt(i);
        switch (c) {
            case ',' :
            case '.' :
            case '?' :
            case '!' :
                sentence = false;
                space = false;
                buffer.append(c);
                break;
            case ' ' :
                if (!space) {
                    space = true;
                    buffer.append(c);
                }
                break;
            case '\t' :
                space = false;
                buffer.append(c);
                break;
            default:
                if (sentence) {
                    buffer.append(Character.toLowerCase(c));
                } else {
                    buffer.append(Character.toUpperCase(c));
                }
                sentence = true;
                space = false;
        }
    }
    System.out.println(buffer);
    

    Output:

    Iki ordu eskihisar'da karşılaştı ve orhan gazi, Bizanslıları denize dökerek büyük bir zafer 
    kazandı. Osmanlılar 1331'de iznik'i, 1337'de izmit'i topraklarına 
    kattı! Izmit'in fethedilmesiyle bizans'ın anadolu'daki varlığı son 
    buldu. Topraklarına Kattı! Izmit'in Fethedilmesiyle Bizans'ın 
    Anadolu'daki Varlığı Son Buldu.