2016-04-19 8 views
1

JavaでCamelCase関数を作成しています。これは文字列this_is_a_sentenceを返し、ThisIsASentenceを返します。私の主な問題は文字列内のさまざまな文字を扱うことです。JavaのCamelCaser関数、デバッグの問題

は、これまでのところ私が持っている:

import java.util.Scanner; 

    public class Main{ 

    public static String camelCaser(String str){ 
     char[] strChr = str.toCharArray(); 

     strChr[0] = strChr[0].toUpperCase; 

     for(int i = 0; i < strChr.length; i++){ 
      if (strChr[i] == '_'){ 
       strChr[i] = strChr[i+1].toUpperCase; 
       strChr[i+1] = ""; 
      } 
     } 
     String newStr = new String(strChr); 
     return newStr; 
    } 

    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("String: "); 
     String str = input.next(); 
     System.out.printf("Converting: %s into %s", str, camelCaser(str)); 
    } 
    } 

私の主な問題は、あなたが個々の文字私はCにするために使用していますと同じ方法を変更することができないということのようです。私はあなたがCharacterと呼ばれるクラスを使用することができることを読んだが、私はそれを使用する方法を理解できない。問題のJavaドキュメントhttps://docs.oracle.com/javase/7/docs/api/java/lang/Character.htmlも私を助けませんでした。

答えて

1

私はこの仕事をするためにあなたのロジックのビットを変更しました。それを動作させる最も簡単な方法は、_の文字列を検索し、次の文字を大文字にすることでした。その後、結果の文字列を取り出し、すべての_を削除します。それはこのように終わった:

import java.util.Scanner; 

public class Caser{ 

    public static String camelCaser(String str){ 
     char[] strChr = str.toCharArray(); 
     strChr[0] = Character.toUpperCase(strChr[0]); 
     for(int i = 0; i < strChr.length; i++) if (strChr[i] == '_') strChr[i+1] = Character.toUpperCase(strChr[i+1]); 
     String reply = new String(strChr); 
     reply = reply.replace("_", ""); 
     return reply; 
    } 

    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     System.out.println("String: "); 
     String str = input.next(); 
     System.out.printf("Converting: %s into %s", str, camelCaser(str)); 
    } 
} 

EDIT:

文字列の回答=新しい文字列(strChrを)何;

これにより、replyという名前の新しい変数が作成されます。変数は文字列です。 new String(strChr)は、Stringクラスが持っているヘルパーで、char[]を与えることができ、自動的にそれをStringに変換します。

何ですかreply = reply.replace( "_"、 "");

.replace(String, String)(この場合は、reply)と、文字列を検索します文字列の方法であると_のすべてのインスタンスを検索しますと、それはそれらを見つけたとき、それは空の文字列でそれを置き換えます(この場合には、それが空であります"")。

+0

ありがとうございます!この行が何をしているのか説明してもらえますか? 'String reply = new String(strChr); reply = reply.replace( "_"、 ""); ' –

+1

注1)これは本当にそれが後に続く '' '_'''を本当に扱っていません。 –

+0

彼は元のコードでもなかったので、なぜ私のコードでもそれに対処していません。 –

0

配列内の文字を大文字に変換するには、Character.toUpperCase(strChr[0]);のようなものを実行する必要があります。

+0

ので、この場合は 'Character' ='のchar [] strChr'を?私はそれを何かinstatiateする必要はありませんか? –

+0

あなたはそれが何を意味するのかよく分かりません。例えば、 'strChr [0] = strChr [0] .toUpperCase;'行は 'strChr [0] = Character.toUpperCase(strChr [0]);' –

+0

に変更する必要があります。 ?なぜそれが必要なのでしょうか? –

0

Character.toUpperCase(char)を使用してください。

public class Main{ 

    public static String camelCaser(String str){ 
    char[] strChr = str.toCharArray(); 

    strChr[0] = Character.toUpperCase(strChr[0]); 

    for(int i = 0; i < strChr.length; i++){ 
     if (strChr[i] == '_'){ 
     strChr[i] = Character.toUpperCase(strChr[i+1]); 
     strChr[i+1] = Character.valueOf('\u0000') ; 
     } 
    } 
    String newStr = new String(strChr); 
    return newStr; 
    } 

    public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    System.out.println("String: "); 
    String str = input.next(); 
    System.out.printf("Converting: %s into %s", str, camelCaser(str)); 
    } 
} 
+0

'Character'(変数、クラス、関数)は何をしますか?正確には何ですか? –

+0

[公式文書](https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html)では、できるだけ多くのことを言っています。要約すると、それはプリミティブ型 'char'のクラス表現です。 –

1

このコードにはいくつかの問題があります。まずtoUpperCase()charには使用できません。Character.toUpperCase(character)に電話する必要があります。次にはコンパイルされません.""は空ですStringstrCharcharの配列です。

私はを使用して分離文字としてのみ使用することを確信している場合は、最初に文字列を "_"で分割します。次に、String(結果はresとする)を作成します。その後、wordsのすべての要素をループし、最初の文字を大文字にしてresに追加し、現在の要素のすべての文字をresに追加します。

だから、それは次のようになります。

public static String camelCaser(String str){ 
    String[] words = str.split("_"); // split str by _ 
    String res = ""; // result string 
    for(String word : words) { 
    // first check, if words is empty 
    if(!word.isEmpty()) { 
     // add first character upper case 
     res += Character.toUpperCase(word.charAt(0)); 
     // add remaining characters as they are, if any 
     if(word.length() > 1) { 
      res += word.substring(1); 
     } 
    } 
    } 
    return res; 
}