2013-10-03 4 views
2

Я пытаюсь использовать первый символ строки. Я видел другие статьи о переполнении стека и пытался использовать общие пакеты Apache. Однако выход остается в нижнем регистре и не изменен. Вот мой код;Apache WordUtils.capitalize не выполняет свою работу

package name; 

import java.util.Scanner; 

import java.lang.Object; 

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

public class Name { 


public static void main(String[] args){ 


    Scanner input = new Scanner(System.in); 

    System.out.println("What is your first name?"); 
    String first = input.nextLine(); 

    System.out.println("What is your last name?"); 
    String last = input.nextLine(); 

    String full = (first + " " + last); 

    WordUtils.capitalize(full); 

    System.out.println("Your name is " + full); 

    input.close(); 
    } 

} 

Я также попытался

System.out.println("What is your first name?"); 
    String first = input.nextLine(); 
      WordUtils.capitalize(first); 

    System.out.println("What is your last name?"); 
    String last = input.nextLine(); 
      WordUtils.capitalize(last);  

    System.out.println("Your name is " + first + last); 

Я попытался с помощью capitalzieFully, но это не дало никаких результатов ни. (Я знаю, что Object не используется, я просто попытался импортировать это как тест).

ответ

4

Строка неизменна в java.

first= WordUtils.capitalize(first); 

Таким образом, вы повторно назначить его first, что возвращаемой методом capitalize.

String first= "test"; 
    WordUtils.capitalize(first); 
    //Above method returns a new String,you are not receiving that 

    // Still first is "test" because String is immutable. 
    first= WordUtils.capitalize(first); 
    //Now first = "TEST" 

А также сделать то же самое в остальных местах.

+0

Благодарим за подробное объяснение, я ценю это. Следите за хорошим человеком. – SamCyanide

+0

@SamCyanide Рад, что это помогло. Добро пожаловать. –

3

попробовать

last = WordUtils.capitalize(last); 

Метод возвращает строку, строки являются неизменными.

+0

К этому вы имеете в виду заменить input.nextLine? Разве это не сделало бы меня неспособным войти в мою строку? – SamCyanide

+0

он назначит следующую строку переменной last, а затем изменит последнее на заглавную –

1
full = WordUtils.capitalize(full); 

Вам необходимо назначить измененную строку для себя, чтобы изменения отражались. Потому что строки неизменны.

Или, если вы не хотите использовать любую внешнюю библиотеку, вы можете сделать что-то вроде этого:

full = Character.toUpperCase(full.charAt(0)) + full.substring(1); 
1

без использования библиотеки

first=first.substring(0,1).toUpperCase()+first.substring(1).toLowerCase(); 
last=last.substring(0,1).toUpperCase()+last.substring(1).toLowerCase(); 
1

Строки неизменны, вы можете изменить вашу строку в любое время к чему-то новому позже по линии.

0

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

WordUtils.capitalizeFully(full); 
Смежные вопросы