2014-10-07 1 views
-2

Прежде всего, пожалуйста, не отмечайте его как дубликат.Как загладить каждую букву после специального письма в андроиде?

У меня есть очень специфическая проблема. Мне нужно загладить первое письмо каждого слова. Проблема в том, что я не могу узнать, когда начиналось слово.

Например, я дал Строка:

0nd0-cathay bank (federal saving) 

И результат должен быть следующим:

0Nd0-Cathay Bank (Federal Saving). 

В настоящее время у меня следующий метод заглавным:

public static String toTitleCase(String str) 
{ 
    if (str == null) 
     return ""; 

    boolean space = true; 
    StringBuilder builder = new StringBuilder(str); 
    final int len = builder.length(); 

    for (int i=0; i < len; ++i) 
    { 
     char c = builder.charAt(i); 

     if (space) 
     { 
      if (!Character.isWhitespace(c)) 
      { 
       // Convert to title case and switch out of whitespace mode. 
       builder.setCharAt(i, Character.toTitleCase(c)); 
       space = false; 
      } 
     } 
     else if (Character.isWhitespace(c)) 
     { 
      space = true; 
     } 
     else 
     { 
      builder.setCharAt(i, Character.toLowerCase(c)); 
     } 
    } 

    return builder.toString(); 
} 

Спасибо всем.

+0

Если вы не знаете решение, то, пожалуйста, не дают отрицательный голос! –

+1

Люди с правом голоса могут оставить комментарий ... – kgandroid

ответ

1

Вы можете использовать следующее решение с регулярным выражением (но не самым красивым).

String input = "0nd0-cathay bank (federal saving)"; 
// case-sensitive Pattern: 
//        | group 1: first letter 
//        |  | group 2: any other character if applicable 
//        |  | | word boundary 
Pattern p = Pattern.compile("([a-z])(.*?)\\b"); 
// Pattern for all capital letters 
// Pattern p = Pattern.compile("([A-Z])(.*?)\\b"); 
// initializing StringBuffer for appending 
StringBuffer sb = new StringBuffer(); 
Matcher m = p.matcher(input); 
// iterating over matches 
while (m.find()) { 
    // appending replacement: 
    //      | 1st letter capitalized 
    //      |      | concatenated with... 
    //      |      |  | any other character 
    //      |      |  | within word boundaries 
    m.appendReplacement(sb, m.group(1).toUpperCase().concat(m.group(2))); 
    // Replacement for all capital letters 
    // m.appendReplacement(sb, m.group(1).concat(m.group(2).toLowerCase())); 
} 
// appending tail if any 
m.appendTail(sb); 
System.out.println(sb.toString()); 

Выход

0Nd0-Cathay Bank (Federal Saving) 

Примечания

  • Это заглавной буквенный символ во всех словах, даже если слова не начинаются с буквы.
  • Например, 0nd0 становится 0Nd0.
  • Если вы все же не хотите этот край, добавьте границу слова (\\b) в Pattern.
+0

ваше решение просто сделать целую строку Capital. –

+0

@HarishGodara nope. Скопируйте его и посмотрите вывод. Он заглаживает первую букву всех слов. – Mena

+1

@Mena он хочет 0Nd0 с капиталом N также. – Alboz

1

Это может работать для вас:

public static void main(String[] args) { 
    String s = "0nd0-cathay bank (federal saving)"; 
    Pattern p = Pattern.compile("(?<![a-z])([a-z])"); // negative look-behind. check if your char is not preceeded by another char. 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
     char val = m.group(1).toUpperCase().charAt(0); 
     s = s.replaceFirst(m.group(1), String.valueOf(val)); 
    } 
    System.out.println(s); 
} 

O/P:

0Nd0-Cathay Bank (Federal Saving) 
+0

«Регулярное выражение», которое мы должны использовать, если у нас есть строка: '0ND0-CATHAY BANK (FEDERAL SAVING)' и вывод должен быть: '0Nd0-Cathay Bank (Federal Saving)'. Я не знаю о 'Regex' –

Смежные вопросы