2013-09-27 3 views
0

는 I'am 숫자와 문자열을 분할하고 내가 그렇게 할 수 있었다 (숫자 만)C# 분할 번호 및 문자열

텍스트 상자에 넣어 위해 노력하지만, 난 단지 텍스트 상자에 마지막 값을 얻을. 그것은 아마 꽤 간단하지만 이후 C#에서 새로운 ... 그래서 내가 뭘하고 싶은 두 개의 값을 다른 텍스트 상자에 얻을 수 있습니다. 8 on one & 17 on another.

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

TryParse를 피하고 다른 텍스트 상자를 사용하려면 +1하십시오. – keyboardP

+0

내가 이것을 사용할 때 나는 첫 번째 값만 얻는다. –

+0

편집 : 이제 작동한다. 당신이 편집했을 때 보지 못했습니다 :) 감사합니다. –

4
textoutput.Text = value.ToString(); 

이 줄은 값 textoutput의 텍스트 값을 덮어 씁니다. 하나의 텍스트 상자에있는 모든 숫자를 사용하려면 다음을 사용하십시오.

textoutput.Text += value.ToString(); 

이렇게하면 텍스트 상자에 다음 값이 추가됩니다.

다른 텍스트 상자에 숫자를 넣으려면 값을 textoutput에 추가 할 수 없습니다. 숫자를 표시하는 데 사용할 텍스트 상자를 바꾸려면 if 문이나 다른 것이 필요합니다.

+0

에 잘 될 것입니다. 그런 다음 텍스트 상자에 가져 가려면 어떻게해야합니까? –

+0

텍스트 상자와 숫자의 수가 일정합니까? 그렇다면 몇 명이 있습니까? – Vulcronos

+0

string [] digits = Regex.Split (스택, @ "\ D +") .Where (s =>! string.IsNullOrWhiteSpace (s)). ToArray(); label1.Text = 숫자 [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(); 

모든 자릿수를 만들려면 텍스트 상자를 반복 할 수 있습니다. 예를 들어, 모든 TextBox를 목록에 추가 할 수 있습니다.

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이라는 가정이다 : (. 그때, int를 받고, TryParse를 사용하지 않는 팀 Schmelter의 생각을 복용 문자열로 변환하는거야)

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

감사 창백. 해결되었습니다. 감사합니다. –