2009-08-20 44 views
9

可能重複:
how can I convert String to Int ?字符串轉換爲整型

嗨,

我有以下問題將字符串轉換爲整數:

string str = line.Substring(0,1); 

//This picks an integer at offset 0 from string 'line' 

所以現在字符串str在其中包含一個整數。我正在做以下幾點:

int i = Convert.ToInt32(str); 

我應該打印一個整數,如果我寫下面的語句對嗎?

Console.WriteLine(i); 

它編譯沒有任何錯誤,但給出了運行時出現以下錯誤:

型「System.FormatException」未處理的異常出現在mscorlib.dll

其他信息:輸入字符串的不以正確的格式。

請幫忙嗎?

+0

用您正在使用的語言標記它。 – sal 2009-08-20 04:26:27

+0

如果您可以在行變量內提供字符串值,則可能更容易檢測到錯誤。 – rahul 2009-08-20 04:31:15

+0

這是一個重複多次,請參閱http://stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int,http://stackoverflow.com/questions/952469/convert -string-to-int,http://stackoverflow.com/questions/887586/convert-string-to-int。 – 2009-08-20 04:51:17

回答

18

而不是使用Convert.ToInt32(string)你應該考慮使用Int32.TryParse(string, out int)來代替。 TryParse方法有助於以更安全的方式處理用戶提供的輸入。錯誤的最可能原因是您要返回的子字符串具有整數值的無效字符串表示形式。

string str = line.Substring(0,1); 
int i = -1; 
if (Int32.TryParse(str, out i)) 
{ 
    Console.WriteLine(i); 
} 
+0

感謝代碼片..我明天會嘗試,因爲我現在無法訪問我的工作站..將在明天更新輸出。無論它可能是..再次感謝 – zack 2009-08-20 04:54:33

+0

設置的理由是什麼我在-1提供的例子?它向我建議,在解析失敗之後,你可以以某種方式測試-1,但是TryParse會將i設置爲0,如果解析失敗 – 2011-01-28 15:31:42

0

這裏完全有可能存在一些空白。嘗試運行類似trim()(我不確定你在使用什麼語言)的東西,這將剝離空白區域。另外,請嘗試打印出字符串以確保您確實擁有正確的部分。我們都做到了:)

+0

那麼,當我使用Console.WriteLine(str)輸出控制檯上的字符串時,它會打印出一個符號(基本上是一個笑臉),因爲我將計數設置爲1,我不認爲除了整數之外還可以有任何其他字符這是打印出來的笑臉)。順便說一句,我在Visual Studio 2005中使用C#。 – zack 2009-08-20 04:32:32

+1

如果控制檯無法打印任何整數,那麼我猜它不是一個整數。我可能在這裏是錯誤的,但我對這種方法的理解是將一個整數的字符串表示(例如「1234」)轉換爲1234的整數數據類型表示,例如可以與之進行數學運算的東西。那是你想要做什麼? – 2009-08-20 04:45:20

1

出現FormatException

值不包括可選 標誌及隨後的數字 (0〜9)序列。

當自變量的 格式不符合 調用的方法的參數規範時引發的異常。

如果您不想生成像這樣的異常,則可以使用Int32.TryParse

Int32.TryParse:的 一批字符串表示形式轉換爲它的32位帶符號整數 當量。返回值表示 操作是否成功。

0

這可能是因爲你的輸入不是有效的格式。試試這個。如果該號碼無效,則應輸出錯誤。

請記住,該字符串應該由一個可選符號和一個數字組成。

string line = "23"; // or whatever. 
string str = line.Substring(0,1); 
int i = 0; 
if (Int32.TryParse(str, out i)) { 
    Console.WriteLine(i); 
} else { 
    Console.WriteLine ("Error converting '" + line + "', '" + str + "'."); 
} 

例如,您可能會看到的一件事是用戶輸入"-1"。如果你這樣做substring(0,1),你只會得到"-"這是不是真的有效。

0

你確定在str中返回的值是一個int,如果你使用visual studio設置一個調試點。我有一種感覺,你的問題可能是你沒有實際返回一個整數。嘗試:

line.Trim().Substring(0,1); 

這將刪除任何空格。

+0

Trim()只會從字符串的末尾和開始處刪除空白,所以這不是保證根據原始字符串包含的內容解決問題。 – 2009-08-20 05:02:39

+0

是的,但由於子字符串是(0,1),這將始終是開始和可能結束。 – StarSignLeo 2009-08-20 05:18:48