Java字符串大写并修复错误

时间:2016-05-07 14:33:45

标签: java capitalize

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

目标字符串;

  

ki o RD uEskihisar'dakarşılaştıveOrhan Gazi,Bizanslılarıdenize dÖkErekbüyükbirzaferkazandı。 o smanlılar1331'de   İznik'i,1337'deİzmit'itopraraklarınakattı!的伊兹米特'在   fethedilmesiyleBizans'ınAnadolu'dakivarlığı儿子 buldu。

我想要这个;

  

İ ki ordu Eskihisar'dakarşılaştıveOrhan Gazi,Bizanslılarıdenize dökerekbüyükbirzaferkazandı。 O smanlılar1331'de   İznik'i,1337'deİzmit'itopraraklarınakattı!的伊兹米特'在   fethedilmesiyleBizans'ınAnadolu'dakivarlığı儿子 buldu。

当我使用StringUtils.capitalize(org.apache library)时土耳其人的角色不起作用......

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

1 个答案:

答案 0 :(得分:2)

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.