Java 字符串大写并修复错误

Java string capitalize and fix errors

我想检查我的字符串是否有大写错误。(有 16.000+ 行)有些行有大写错误。如果字符以小写字母开头或单词有一些大写字符后的特殊字符(?,!,。等。)。 (字符串有土耳其语字符)

目标字符串;

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.

我想要这个;

İ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.

当我使用 StringUtils.capitalize(org.apache library) 土耳其字符时不起作用...

我可以在 java 中做到这一点吗?

StringUtils.capitalize 不适合您,因为如果您在单词中间有一个大写字母,它将保留为大写字母,这显然不是您想要的。

实现方法如下:

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);

输出:

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.