2012-02-15 1 views
2

私はタイトルケースに文字列sを変換することになっています。このJavaの機能を持っています。 sを呼び出し元に返し、sのままにしてください。のJava toTitleCase機能

現在、rvは空の文字列として終了します。なぜ誰かが私に言うことができますか?あなたにRVを宣言した後、Javaで不変であること

private static String titleCase(String s) { 
     String rv = new String(); 
     StringTokenizer strtok = new StringTokenizer(s); 
     // handle the potential null error: (should really output a runtime warning here) 
     if(s == null) return null; 
     while(strtok.hasMoreTokens()) { 
      String word = strtok.nextToken(); 
      String firstLetter = word.substring(0,1); 
      String restOfWord = word.substring(1); 
      rv.concat(firstLetter.toUpperCase() + restOfWord.toLowerCase()); 
     } 
     return rv; 
    } 
+0

、あなたはこの方法で他の_anything_前に、その最初にやるべき。 'StringTokenizer'をなぜ使用しないのですか? (オプティマイザはスマートになっていても、それを並べ替えるのに十分であるかもしれませんが、メンテナンスプログラマにとっては、とにかく読む方が良いでしょう) –

+0

私はCプログラマです。コードの前に変数宣言を置く習慣を壊すことはできません。それを指摘してくれてありがとう、しかし、私はそれを本当に再注文する必要があります。 –

答えて

4

文字列「」(=新しいString())あなたはそれに新しいStringを割り当てていない限り、それは変更されません。 、

rv = rv.concat(firstLetter.toUpperCase() + restOfWord.toLowerCase()); 

またはそれ以上の代わりに文字列(テストされていない)のStringBuilderのを使用します: 次の方法で、連結ラインを置き換えることができますいずれか

StringBuilder rv = new StringBuilder(); 
// [...] 
rv.append(firstLetter.toUpperCase()).append(restOfWord.toLowerCase()); 
// [...] 
return rv.toString(); 
+0

ありがとう、これは働いた。スペースを取り戻すために少し修正しなければならなかったが、とにかくそれをやらなければならなかっただろう。 –

0

私はWordUtils.capitalizeまたはWordUtils.capitalizeFullyを使用すると思います。あなたがnullのチェックを行う(または例外をスロー)している場合

+0

使用方法の例を編集できる場合は、受け入れられた回答を切り替えることを検討します。それが立てば、これは他の答えほど私にとって有用ではありません。あなたの入力のためにありがとう:) –

+0

リンクされたjavadocのいくつかの例があります。あなたはそれをチェックしましたか? :-) – palacsint

+0

はい私はjavadocをチェックしましたが、それは余分な心配を私に提示しました - このソリューションは余分なライブラリが含まれていなくてもかまいませんか?依存関係を追加するのはちょっとした問題だと思うので、私は自分のソリューションをロールバックします。 –