2013-12-05 2 views
-2

Я вижу какое-то странное явление, что, если я не использую свою исходную строку ввода для преобразования обратно в строку из массива char, изменения не возникают в новом строка?создание новой строки из массива char

public static void main(String[] args){ 
    Scanner scan = new Scanner(System.in); 
    System.out.print("Type in String:"); 
    String theString = scan.nextLine(); 
    theString = theString.replaceAll("\\s+", " "); 
    char [] convert = theString.toCharArray(); 
    convert[0] = Character.toUpperCase(convert[0]); 
    for(int i = 0; i < convert.length; i++){ 
     if(Character.isWhitespace(convert[i])){ 
      convert[i+1] = Character.toUpperCase(convert[i+1]); 
     } 
    } 
    theString = String.valueOf(convert); 
    System.out.println(theString); 

Если линия theString на второй до последней строки было изменено позволяет сказать:

String newString = String.valueOf(convert); 

или

String newString = String(convert); 

Мой выход не изменяет вход! Эта программа суммирует заглавные буквы первого символа каждого слова в строке. Может кто-нибудь объяснить, почему происходит событие?

+1

Можете ли вы попытаться объяснить это снова? Я изо всех сил пытаюсь понять, что вы ожидаете, и что на самом деле происходит. –

+0

в принципе, вход привет мир => Hello World для вывода Однако, если я изменяю имя или переменную массива символов, которые нужно преобразовать в строку, он не работает –

+1

Ну, если 'newString' содержит преобразованную строку, но вы напечатайте 'theString', очевидно,' 'String' напечатан. И 'theString' - это начальная, а не преобразованная строка. –

ответ

1

Его работы. Я протестировал его. Я думаю, что вы забыли изменить

System.out.println(theString); 

в

System.out.println(newString); 

Полный код:

public static void main (String[] args) 
{ 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Type in String:"); 
     String theString = scan.nextLine(); 
     theString = theString.replaceAll("\\s+", " "); 
     char [] convert = theString.trim().toCharArray(); 
     convert[0] = Character.toUpperCase(convert[0]); 
     for(int i = 0; i < convert.length; i++){ 
      if(Character.isWhitespace(convert[i])){ 
       convert[i+1] = Character.toUpperCase(convert[i+1]); 
      } 
     } 
     String newString = String.valueOf(convert); 
     System.out.println(newString);  
} 

вход: привет мир

выход: Hello World

Вот что вам ожидаемый :) d i исправлено исключение ArrayIndexOutOfBounds, когда строка заканчивается пробелом.

char [] convert = theString.trim().toCharArray(); 
+0

ты прав ... глупо мне ... извини! –

+0

затем ответьте, чтобы отметить вопрос как ответ :) – kai

1

Он отлично работает, но то, что вы хотите, чтобы рассмотреть после сканирования в строке использовать

theString.trim(); 

Это удалит whitspaces с конца, потому что прямо сейчас, если я введу «привет привет» (обратите внимание космос в конце), он выкинет исключение OutOfBOundsException из-за вашего i+1 в цикле.

Или просто проверьте внутри своей петли, если существует индекс i+1.

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