У меня есть строка "nameOfThe_String". Здесь первая буква строки должна быть заглавной. Итак, я использовал

String strJobname="nameOfThe_String"; strJobname=strJobname.substring(0,1).toUpperCase()+strJobname.substring(1);

Теперь мне нужно вставить пробел перед заглавными буквами. Итак, я использовал

strJobname=strJobname.replaceAll("(.)([A-Z])", "$1 $2");

Но здесь мне нужен вывод как "Name Of The_String". После '_' мне не нужно никакого пробела, даже если S - это заглавная буква.

Как я могу это сделать? Пожалуйста, помогите мне с этим.

1
Orsu Suni 20 Июн 2017 в 08:53

3 ответа

strJobname=strJobname.replaceAll("([^_])([A-Z])", "$1 $2");

Символ ^ в качестве первого символа в квадратных скобках означает: Не этот символ. Итак, с первой группой скобок вы говорите: любой символ, кроме _. Однако обратите внимание, что ваше регулярное выражение может также вставлять пробелы между последовательными заглавными буквами.

5
Kai Weber 20 Июн 2017 в 09:00

При осмотре вы можете использовать:

String strJobname="nameOfThe_String";
strJobname = Character.toUpperCase(strJobname.charAt(0)) +
             strJobname.substring(1).replaceAll("(?<!_)(?=[A-Z])", " ");

//=> Name Of The_String

Демо RegEx

1
anubhava 20 Июн 2017 в 09:10

Вот другой способ, который может удовлетворить ваши требования.

public static void main(String[] args) {

    String input;
    Scanner sc = new Scanner(System.in);
    input = sc.next();
    StringBuilder text = new StringBuilder(input);
    String find = "([^_])([A-Z])";
    Pattern word = Pattern.compile(find);
    Matcher matcher = word.matcher(text);
    while(matcher.find())
        text = text.insert(matcher.end() - 1, " ");

    System.out.println(text);
}
0
Pang 20 Июн 2017 в 09:55