2012-03-16 79 views
0

我有一個算法,從標準輸入讀取到名爲'名稱'的字符串變量,然後創建一個字符串數組,存儲名稱..我試圖做到這一點在Java中,但首先,在C或C++中,我可以簡單地做到這一點:strcpy(arr,name);但是這些是字符串類型,並且在Java中沒有與我見過的c_str()等價的東西請,我怎麼做呢?strcpy在java :(

 .... //codes are here... 
     System.out.Println("enter your name and press enter:"); 
     BufferedReader br = new BufferedReader(InputStreamReader(System.in)); 
     String name = null; 
    try 
    { 
     name = br.readLine(); 
     String[] arr = new String[name.length]; 
     //wish this was C++; 
     strcpy(arr.c_str(), name.c_str()); //how do you copy the name string to the arr 
              //string? 

    }catch(IOException e) 
    { 
     System.out.Println(e.getMessage()); 
    } 

    MyClass A = new MyClass(arr); 
+0

這聽起來像你想擁有所有的'String'陣列'name'中的字符? – paislee 2012-03-16 17:37:51

+0

爲什麼你需要字符串數組,如果你只有'readLine'只有一次 - 有'String.toCharArray'和'System.arraycopy' – scibuff 2012-03-16 17:38:43

+0

'strcpy(arr,name)'''name'用戶輸入聽起來像C中的自殺。我希望你不能輕易在Java中打破你的程序。 – 2012-03-16 17:39:11

回答

3

我認爲你是在這裏完全混合起來的東西。

要麼分配name = br.readLine()將產生錯誤(因爲的readLine()返回一個String不是String[])或表達name.length會產生一個編譯器錯誤,因爲String不具有屬性length只有一個方法length()

其次:

String[] arr = new String[name.length]; 

將創建String對象的數組。它確實是而不是聲明一個長度爲name.length的字符串。

如果你真的想存儲從閱讀器讀取到一個String對象的數組的值,可以直接給這個:

String[] arr = new String[] { name }; 

建立一個數組的一個元素,包含名稱的值變量。

但我不明白爲什麼你想把String實例放入數組中。

最後但並非最不重要的是:沒有必要複製你所得到的字符串。您可以安全地使用該實例(例如從方法中返回),因爲String類在Java中是不可變的。

5

您可能不需要複製該字符串。

在C語言(以及C++的一部分)中,字符串表示爲字符數組,其內容可以在程序的整個生命週期中更改 - 因此需要strcpy,部分原因是您可以保留字符串內容。

然而,在Java字符串由String類來描述,實例是不可變的,所以字符串的內容不能througout程序的一生都在變化。這意味着一旦你獲得了一個字符串的引用,就可以將它傳遞給任何其他的Java代碼,而不用擔心其內容被更改。

在你的代碼示例

所以,一旦你已經閱讀了「名」的字符串,你可以只是值傳遞給MyClass構造:

System.out.println("Enter your name and press enter:"); 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String name = br.readLine(); 
MyClass a = new MyClass(name);