2016-03-19 6 views
-3

Im folgenden Beispiel kompiliert dieses Programm-Snippet nicht, aber wenn wir die Methode Character.toString(char) durch String.valueOf(char) ersetzen, ist alles in Ordnung. Was ist das Problem, warum Character.toString hier? In der Dokumentation scheinen diese Methoden das gleiche Verhalten zu haben. Danke für die Erklärung.Unterschiedliches Verhalten zwischen String.value0f und Character.toString in Java

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

Ich verstehe nicht. 'Character.toString (...)' nimmt ein 'char'. Du gibst eine 'Zeichenfolge'. Was hast du erwartet? – Tunaki

+1

Das Ergebnis von 'source_string (1,3)' ist der 2-stellige String '" 9/"'. Was haben Sie von 'Character.toString()' damit erwartet? Der Aufruf von 'String.valueOf()' an einem String führt zu nichts; es ist schon ein String. Vielleicht solltest du das Javadoc von [substring (int beginIndex, int endIndex)] lesen (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int, % 20int% 29) – Andreas

+0

@oukios 'sourcestring (1,3)' gibt einen String zurück. Sie können ihn nicht der String-Methode zuweisen. –

Antwort

4

Character.toString(char c) Methode akzeptiert char Wert als Argument und man Hindurchleiten eine String Klasseninstanz, die aus source.substring(1,3) Verfahren hergestellt wird. String und char sind inkompatible Typen, so Compiler kann nicht richtig Methodenaufruf erstellen und den Wert übergeben

sollte Ihr Code wie neu geschrieben werden:

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)); 
} 

Beachten Sie auch, dass das erste Argument substring ein inklusive ist Start Index, der zweite ist exklusive Ende Index und der führende Index in Java String ist 0 (nicht 1) genau wie in Arrays (was kein Zufall ist - String-Zeichen sind in Char-Array gespeichert). Also, wenn Sie eine "19" String erhalten möchten, sollten Sie schreiben source.substring(0, 2)

+1

Danke für Ihre Antwort, alles ist klar. – loukios

+0

Gern geschehen! Und vergessen Sie nicht, meine Antwort als akzeptiert zu markieren, um eine Frage zu schließen :) – Cootri

1

Was sagt die Compiler-Fehlermeldung? Wie auch immer, source.substring(1,3) gibt Ihnen eine String, während Character.toString() eine char benötigt und keine String akzeptiert.

String.valueOf(source.substring(1,3)) würde String.valueOf(Object) anrufen, nicht String.valueOf(char).

Sie können gleich erhalten noch einfacher:

String result = source.substring(1,3); 
Verwandte Themen