2014-10-24 5 views
0

Я пытался использовать массив, но он просто возвращает исходную строку.Занимая каждое слово в строке

public static String capitalizeEveryOtherWord(String x) { 
    x = x.toLowerCase(); 
    x.trim(); 
    String[] words = x.split(" "); 
    for(int c = 2; c < words.length; c += 2) 
     words[c].toUpperCase(); 
    return Arrays.toString(words); 
} 

Может ли кто-нибудь помочь?

ответ

6

toUpperCase() и trim() вернуть новые строки вместо изменения существующих. Вам нужно назначить эти новые строки.

public static String capitalizeEveryOtherWord(String x) { 
    x = x.toLowerCase(); 
    x =x.trim(); 
    String[] words = x.split(" "); 
    for (int c = 2; c < words.length; c += 2) 
     words[c] =words[c].toUpperCase(); 
    return Arrays.toString(words); 
}

Кроме того, вы, вероятно, должны были начинать с индекса 0 или 1 - первого или второго элемента соответственно.

+0

Спасибо! теперь все работает :) – Fluffle

0

Minitech правильно определил проблему ИМХО, но я хотел бы использовать другой подход на основе регулярных выражений:

public static String capitalizeEveryOtherWord(String x) { 
    StringBuilder result = new StringBuilder(x); 
    Matcher matcher = Pattern.compile("^ *\\w|\\w* \\w+ \\w").matcher(x); 
    while(matcher.find()) 
     result.setCharAt(matcher.end() - 1, Character.toUpperCase(x.charAt(matcher.end() - 1))); 
    return result.toString(); 
} 

(испытано и работы).

+0

Что такое регулярное выражение? ха-ха – Fluffle

0

Это также работает:

public class answerForStackOverflow { 
public static void main(String[] args) { 

    String examplestring = "iwouldreallyliketothankforallthehelponstackoverflow"; 
    String output = ""; 

    for (int i = 0; i < examplestring.length(); i++) { 
     char c = examplestring.charAt(i); 
     if (i % 2 == 0) { 
      output += examplestring.substring(i, i + 1).toUpperCase(); 
     } else { 
      output += examplestring.substring(i, i + 1); 
     } 
    } 
    System.out.println(output); 
    } 
} 
Смежные вопросы