2016-03-19 20 views
-3

在下面的示例中,該程序片段不能編譯,但如果我們用String.valueOf(char)替換方法Character.toString(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)'的結果是兩個字符的字符串'「9 /」'。你期望'Character.toString()'做了什麼?在String上調用'String.valueOf()'什麼也不做;它已經是一個字符串。也許你應該閱讀['substring(int beginIndex,int endIndex)']的javadoc(https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int, %20int%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參數是一個包容開始索引,第二個是獨佔結束索引和Java String中的前導索引是0(不是1)完全像數組(這不是巧合 - 字符串字符存儲在char數組中)。所以,如果你想得到一個「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(Object),而不是String.valueOf(char)

您可能會得到相同甚至更簡單:

String result = source.substring(1,3); 
相關問題