2013-09-27 99 views
0

我'試圖分裂數字和字符串,並把它們放在一個文本框(僅數字)C#斯普利特數字和字符串

我能做到這一點,但我只得到文本框的最後一個值。這可能很簡單,但是因爲我在C#上新增了... 所以我想要做的是在不同的文本框中獲取這兩個值。 8 on one & 17另一個。

string Stack = "azersdj8qsdfqzer17"; 

     string[] digits = Regex.Split(Stack, @"\D+"); 

     foreach (string value in digits) 
     { 

      int number; 
      if (int.TryParse(value, out number)) 
      { 
       textoutput.Text = value.ToString(); 
      } 
     } 
+0

總是隻有兩個數字嗎?目前,您正在使用'textoutput.Text =',它將覆蓋循環中的前一個值。 – keyboardP

+0

是的,它將始終是兩個數字。 但知道如何使它爲X號將是偉大的 –

回答

3

您需要將字符串分配給兩個文本框,而不是一個循環中的一個。

string[] digits = Regex.Split(Stack, @"\D+") 
    .Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); 
textoutput1.Text = digits[0]; 
textoutput2.Text = digits.ElementAtOrdefault(1); 
+0

+1用於避免TryParse並使用不同的文本框。 – keyboardP

+0

當我使用這個 我得到的第一個值只有8 –

+0

編輯:現在它的工作。沒有看到你編輯時:)謝謝 –

4
textoutput.Text = value.ToString(); 

這條線覆蓋textoutput與該值的文本價值。如果你想在一個文本框中使用所有的數字:

textoutput.Text += value.ToString(); 

這將在未來的價值添加到文本框,而不是overwritting。

如果您希望數字位於不同的文本框中,那麼您不能只將值添加到textoutput。你需要一個if語句或者什麼來交換你將用來顯示數字的文本框。

+0

那麼我應該怎麼做才能讓他們在分離的文本框 –

+0

是文本框和數字的數量不變?如果是這樣,你有多少? – Vulcronos

+0

使用此固定鏈接地址: string [] digits = Regex.Split(Stack,@「\ D +」) .Where(s =>!string.IsNullOrWhiteSpace(s))。ToArray(); label1.Text = digits [0]; label2.Text = digits.ElementAtOrDefault(1); –

0

修改textoutput.Text = value.ToString();聲明。

textoutput.Text += value.ToString(); // It will show all numbers present in string 

textoutput.Text = value.ToString(); // This will only show the last number in string 

問題在你的代碼是你指定電話號碼發短信文本框,這是最後一個值覆蓋的屬性,所以你應該串連可以顯示所有的數字。

0

根據評論,總是有兩個數字,所以不需要循環,因爲你沒有追加到同一個文本框。

textoutput.Text = digits[0].ToString(); 
secondtextoutput.Text = digits[1].ToString(); 

要讓它爲任意數字的數字,你可以遍歷你的文本框。例如,您可以將所有文本框添加到列表中。

List<TextBox> myTextBoxes = new List<TextBox>(); 
myTextBoxes.Add(myTB1); 
myTextBoxes.Add(myTB2); 
//... 

然後遍歷數字並在上面創建的TextBox列表中使用相同的索引。

for(int i = 0; i < digits.Length; i++) 
{ 
    myTextBoxes[i].Text = digits[i].ToString(); 
} 

您可以添加錯誤處理(如文本框,如果的數量小於位數),但會增加值到不同的文本框的一種方式。

0

現在,您有一個for循環,並且您只設置了一個包含您的值的文本框。有很多方法可以解決這個問題。這裏是我的建議,假設你的第二個文本框被命名爲textoutput2:(我以不使用的TryParse的蒂姆Schmelter的想法,得到一個int,然後將其轉換爲一個字符串)

string Stack = "azersdj8qsdfqzer17"; 
string[] digits = Regex.Split(Stack, @"\D+"); 

textoutput.Text = "replace"; 
textoutput2.Text = "replace"; 

foreach (string value in digits) 
{ 
    if (textoutput.Text == "replace") { 
     textoutput.Text = value; 
    } else { 
     textoutput2.Text = value; 
    } 
} 

這是一種還因爲它設置了第一個文本,然後對於所有其他找到的數字,它只設置第二個數字,但是您可以輕鬆地將其擴展爲任意數量的文本框,例如與3盒:

string Stack = "azersdj8qsdfqzer17"; 
string[] digits = Regex.Split(Stack, @"\D+"); 

textoutput.Text = "replace"; 
textoutput2.Text = "replace"; 
textoutput3.Text = "replace"; 

foreach (string value in digits) 
{ 
    if (textoutput.Text == "replace") { 
     textoutput.Text = value; 
    } else if (textoutput2.Text == "replace") { 
     textoutput2.Text = value; 
    } else { 
     textoutput3.Text = value; 
    } 
} 

還有其他的方法可以做到這一點,與文本框,或動態創建文本框的數組,但是這是一個基本的開始。

+0

謝謝蒼白。 解決了,謝謝你們 –