2016-08-08 3 views
1

Допустим, мы имеем строку в Java:Как я могу изменить строку всех кепок, чтобы использовать первую букву, а затем первую букву после каждого пробела? (Java)

String str = "ALL CAPS MATE"; 

Как я могу изменить его так, что это выглядит, но и для любого слова:

String result = "All Caps Mate"; 

Есть ли способ Струнный аналогичный к .toUpperCase() или .toLowerCase()? Если есть, я не могу найти его.

Буду признателен за решение метода струн.

Спасибо.

+0

http://stackoverflow.com/questions/3696441/converting- а-символ к верхнему регистру. Перебирайте строку и верхний/нижний символы. –

+0

В String такого метода нет. –

+0

Существует не встроенный, поэтому подумайте о том, чтобы создать свой собственный метод. сделайте все в нижнем регистре, разделите строку на пробелы на массив, разделите каждый элемент на массив символов, получите доступ к первому элементу каждого элемента в общем массиве и сделайте его заглавным, затем соедините все вместе. –

ответ

0

Класс WordUtils от org.apache.commons.lang3.text имеет статический метод capitalizeFully, который выполняет то, что вам нужно. Вам понадобится комманда lang3 jar в вашем пути к классам.

import org.apache.commons.lang3.text.WordUtils; 

WordUtils.capitalizeFully(input); 
1

Я думаю, что это будет решить вашу проблему с помощью библиотеки апачского for more information

org.apache.commons.lang3.text.WordUtils

String result= WordUtils.capitalizeFully(str); 

для более сложного одного взгляда на этом link

и я думаю, что ваш вопрос уже задан here

+0

Я не думаю, что это правильно. Вы проверили это? –

+0

Да, моя ошибка. Я отредактировал его @David Wallace –

+1

Я все еще не думаю, что это правильно. Метод «capizeize» изменяет только первый символ каждого слова. OP хочет, чтобы _opposite_ этого. –

0

Апач библиотеки содержат некоторые способы справиться с этим, как упомянуто B'bek Шакья и комментарий, но если вы ищете прямой родное решение Java вы могли бы сделать это как Лысый Banta упоминается в комментариях.

Вот пример кода с использованием потоков:

public static void main(String[] args) { 
    String input = "fOo bar"; 
    String transformed = Arrays.stream(input.toLowerCase() 
              .split(" ")) 
           .map(String::toCharArray) 
           .map(arr -> { 
            arr[0] = Character.toUpperCase(arr[0]); 
            return arr; 
           }) 
           .map(String::valueOf) 
           .collect(Collectors.joining(" ")); 
    System.out.println(transformed); 
} 

И то же самое с использованием более общей идиомы цикла:

public static void main(String[] args) { 
    String input = "fOo bar"; 
    String[] words = input.toLowerCase().split(" "); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < words.length; i++) { 
     char[] word = words[i].toCharArray(); 
     word[0] = Character.toUpperCase(word[0]); 
     if (i != 0) { 
      sb.append(" "); 
     } 
     sb.append(String.valueOf(word)); 
    } 
    System.out.println(sb.toString()); 
}