2016-06-14 50 views
0

你好,我正在嘗試將字符串轉換爲整數。將字符串轉換爲int中的錯誤#

下面的代碼顯示了我嘗試將字符串轉換爲整數的一部分。

if (other.gameObject.CompareTag("PickUp")) 
{ 
    if (checkpointboolean == false) 
    { 
     string pickupName = other.ToString(); //other = Pickup4 
     //Remove first 6 letters thus remaining with '4' 
     string y = pickupName.Substring(6); 
     print(y); // 4 is being printed 
     int x = 0; 
     int.TryParse(y, out x); 
     print (x); // 0 is being printed 

我也試過下面的代碼和,而不是「0」我收到以下錯誤:

if (other.gameObject.CompareTag("PickUp")) 
{ 
    if (checkpointboolean == false) 
    { 
     //Get Object name ex: Pickup4 
     string pickupName = other.ToString(); 
     //Remove first 6 letters thus remaining with '4' 
     string y = pickupName.Substring(6); 
     print(y); 
     int x = int.Parse(y); 

FormatException: Input string was not in the correct format System.Int32.Parse (System.String s)

+0

如何確定你是沒有charaters * *後的4?嘗試打印'y.Length' ... –

+0

你必須逐步調試它與斷點 –

+2

這似乎告訴你,你的字符串包含無效字符。你確定你在該子串中只有4個?如果你有一個調試器試圖看看這個值,那麼丟失它然後改變使用print(「[」+ y +「]」);看看是否有其他人物 – Steve

回答

1

int.TryParse返回一個布爾值,true,如果它成功,假如果不是。你需要把它封裝在一個if塊中,並用這個邏輯做一些事情。

if(int.TryParse(y, out x)) 
    print (x); // y was able to be converted to an int 
else 
    // inform the caller that y was not numeric, your conversion to number failed 

至於爲什麼你的號碼沒有轉換,我不能說,直到你發佈字符串值是什麼。

0

你的第一次嘗試是最好的這種情況下,代碼工作正常,該int.TryParse()0的輸出參數和返回false意味着轉換失敗。輸入字符串格式不正確/不能轉換爲整數。您可以使用int.TryParse()的返回值進行檢查。爲此,你需要做的是: -

if(int.TryParse(y, out x)) 
    print (x); // 
else 
    print ("Invalid input - Conversion failed"); 
+3

「int.TryParse()給出輸出爲0意味着轉換失敗。」 - 實際上這意味着它可能會失敗。它也可能只是一個包含0的字符串.OP應該正確地檢查返回碼。 – CompuChip

+0

@CompuChip:好吧,但不是「一個包含0的字符串」,如果輸入爲「0」,它將爲「0」 –

0

首先,ToString()通常用來調試目的所以沒有保證

other.ToString() 

將在下一版本返回預期"Pickup4"的軟件。你,或許,要像

int x = other.gameObject.SomeProperty; 
    int x = other.SomeOtherProperty; 
    int x = other.ComputePickUp(); 
    ... 

如果,但是,堅持.ToString()你寧願不硬編碼六個字母(原因是一樣的:調試信息傾向於從版本更改爲版本),但使用正則表達式什麼:

var match = Regex.Match(other.ToString(), "-?[0-9]+"); 

    if (match.Success) { 
    int value; 

    if (int.TryParse(match.Value, out value)) 
     print(value); 
    else 
     print(match.Value + " is not an integer value"); 
    } 
    else 
    print("Unexpected value: " + other.ToString());