2013-01-01 3 views
1

나는 C#에서 일하고 있어요 그리고 난 같은 주소를 포함하는 문자열을 많이 가지고 사용하지 않고 숫자 및 텍스트 부분으로 주소 문자열 : 등등분할 정규 표현식

10 Downing Street 
Birch Lane 7 
Palm Creek 8 Street 
84 Chancellor Place 
Battle on the Somme 56 

하고 있습니다.

이 문자열을 숫자 부분 (예 : "10"또는 "7")과 텍스트 부분 (예 : "Downing street"또는 "Birch Lane")으로 분할해야합니다.

오, 나는 RegEx를 사용하지 말 것을 요청 받았다.

string s ="84 Chancellor place"; 
string [] words = s.Split(' '); 

문제는 (물론)은 모든 문자열 같은 방법으로 분할하지 않는다는 것입니다, 그래서 나는 항상 제외 할 수 없습니다 :

나는이 같은 공간에서 그들을 분할 이미 ​​시도했습니다 텍스트의 나머지 부분의 수 (예 : 숫자가 단어 [0] 인 것으로 항상 알고있는 것은 아니며 텍스트 부분은 서로 다른 셀에 있으며 융합되지 않았습니다).

숫자 추출 방법을 찾아 주셔서 감사드립니다.

편집 : 각각의 예에서 원하는 출력이 작은 클래스를 사용

List<Address> addresses = new List<Address>(); 
foreach (string str in strings) 
{ 
    Address addr = new Address(); 
    addresses.Add(addr); 
    int num, numIndex = int.MinValue; 
    string[] tokens = str.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries); 
    for (int i = 0; i < tokens.Length; i++) 
    { 
     if (int.TryParse(tokens[i], out num)) 
     { 
      addr.Number = num; 
      numIndex = i; 
      break; 
     } 
    } 
    if (addr.Number.HasValue) 
    { 
     // join the rest with white-spaces to the street name skipping the number 
     addr.Street = string.Join(" ", tokens.Where((s, i) => i != numIndex)); 
    } 
    else 
    { 
     addr.Street = str; 
    } 
} 

:

string1=10 string2=Downing Street 
string1=7 string2=Birch Lane 
string1=8 string2=Palm Creek Street 
string1=84 string2=Chancellor Place 
string1=56 string2=Battle on the Somme 
+0

게시 한 각 사례에 대해 원하는 출력을 포함하십시오. – Oded

+5

"REGEX를 사용하지 말라는 질문을 받았습니다"는 나에게 어리석은 요구 사항처럼 보입니다. 직장에 가장 적합하기 때문입니다. 마치 팔을 쓰지 않고 무거운 짐을 움직이는 것을 누군가에게 묻는 것과 조금 같습니다. – spender

+0

@spender - 의미는 숙제 일 것입니다. – Oded

답변

2

당신은 string.Splitint.TryParse의 도움으로 List<Address>를 초기화하기 위해 루프를 사용할 수 있습니다 :

class Address 
{ 
    public int Number { get; set; } 
    public string Street { get; set; } 
} 

DEMO

면책 조항 :이 페일 세이프 (fail-safe)되지 않도록 모든 입력이 임의의 경우 유의하십시오. 세계에서 숫자를 포함하는 거리가 많이 있으며 chars (예 : "17a") 숫자도 있습니다.