2016-03-19 11 views
-3

次の例では、このプログラムスニペットはコンパイルされませんが、Character.toString(char)String.valueOf(char)に置き換えた場合はすべて正常です。 Character.toStringはなぜここにあるのですか?ドキュメントでは、これらのメソッドは同じ動作をしているようです。説明をありがとう。String.value0fとJavaのCharacter.toStringの動作が異なります

public static void main (String args[]) { 

String source = "19/03/2016 16:34"; 

String result = Character.toString(source.substring(1,3)); 
System.out.print(result); 

} 
+3

を。 'Character.toString(...)'は 'char'をとります。あなたは 'String'を与えています。あなたは何を期待しましたか? – Tunaki

+1

'source.substring(1,3)'の結果は、2文字の文字列 '' 9/"'です。あなたは 'Character.toString()'にこれと何を期待しましたか? String上で 'String.valueOf()'を呼び出すと何も起こりません。それはすでにストリングです。おそらく、あなたは['substring(int beginIndex、int endIndex)'](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int、 %@%%@ 29) – Andreas

+0

@oukios 'source.substring(1,3)'は文字列を返します。文字列メソッドの必要はありません。 –

答えて

4

Character.toString(char c)メソッドは、引数としてchar値を受け入れ、あなたがsource.substring(1,3)方法から製造されStringクラスのインスタンスを渡しています。あなたのコードのように書き換える必要がありStringcharは互換性のないタイプなので、コンパイラは

を正しいメソッド呼び出しを作成して値を渡すことはできません。

public static void main (String args[]) { 
    String source = "19/03/2016 16:34"; 
    String result = source.substring(1, 3); 
    System.out.print(result); 
    //equivalent to the previous System.out.println call 
    System.out.print(source.substring(1, 3)); 
} 

また最初substring引数は包括であることに注意してください2番目は排他的終了インデックスで、Java Stringの先頭のインデックスは配列とまったく同じです(一致しない - 文字列は文字配列に格納されます)。したがって、 "19"文字列を取得する場合は、書き込むべきですsource.substring(0, 2)

+1

ご回答いただきありがとうございます。 – loukios

+0

あなたは大歓迎です!そして、質問を閉じるために受け入れられたとして私の答えをマークすることを忘れないでください:) – Cootri

1

コンパイラのエラーメッセージには何が表示されますか?とにかく、source.substring(1,3)Stringを、Character.toString()charを必要とし、Stringは受け入れません。

String.valueOf(source.substring(1,3))String.valueOf(char)ではなくString.valueOf(Object)となります。

あなたも、単純に同じ得ることができる:私は理解していない

String result = source.substring(1,3); 
関連する問題