2011-12-14 4 views
0

(마지막 처음, 중간,) 3 개 요소와 배열에 "처음, 중간, 중간, 마지막으로"분할 나는 세 가지 요소에 다음 문자열을 분할하고 싶습니다

first, middle, middle, middle, middle, last 

그래서 결과가 될 것이다 :

splits[0] = "first" 
splits[1] = "middle, middle, middle, middle" 
splits[2] = "last" 

이것이 정규 표현식 또는 문자열 메소드로 가장 잘 수행되는지 여부는 알 수 없습니다.

+0

을, 경우에 대해 "첫째, 첫째, 먼저"이 모든 것이 무엇 [0]. – subodh

+0

내 문제는 문자열의 내용이 아닌 ","과 관련됩니다. "first, first, first"는 [0] = "first"[1] = "first"[2 ] = "first" – Mattias

답변

7
var s = "first, middle, middle, middle, middle, last"; 
var singleItems = s.Split(',').Select(x => x.Trim()); 
var splits = new [] 
      { 
       singleItems.Take(1).Single(), 
       singleItems.Skip(1).Take(singleItems.Count() - 2) 
            .Aggregate("", (s1, s2) => s1 + s2 + ", ") 
            .Trim(' ', ','), 
       singleItems.Skip(singleItems.Count() - 1).Single() 
      }; 

는이 될 것이다 일을하는 또 다른 방법은 :

var firstIndex = s.IndexOf(','); 
var lastIndex = s.LastIndexOf(','); 
var splits = new [] 
      { 
       s.Substring(0, firstIndex), 
       s.Substring(firstIndex + 2, lastIndex - (firstIndex + 2)), 
       s.Substring(lastIndex + 2) 
      }; 

나는 두 번째 솔루션은 깨끗하고 이해하기 쉽게라고 생각합니다. 그러나 첫 번째와 마지막 쉼표에는 반드시 공백이 있어야한다는 단점이 있습니다. 이 요구 사항은 첫 번째 버전에는 존재하지 않습니다.

+0

닉을위한 Upvote 전자 접근! 그냥 그 집계가 요청 된 방식으로 중간 이름을주지 않을 것이라고 생각합니다. (중간, [쉼표] [중간]). –

+0

@PavelDonchev : 방금 고쳤습니다. 편집을 참조하십시오. –

+0

트리밍과 부분 문자열을 사용해 주셔서 감사합니다. – Mattias

0
string separator = ", "; 
    string input = "first, middle, middle, middle, middle, last"; 
    int i1 = input.IndexOf(separator); 
    int i2 = input.LastIndexOf(separator); 
    string[] splits = new string[3]; 
    splits[0] = input.Substring(0, i1); 
    splits[1] = input.Substring(i1 + separator.Length, i2 - i1 - separator.Length); 
    splits[2] = input.Substring(i2 + separator.Length); 
0
string data = "first, middle, middle, middle, middle, last"; 

string[] splitData = data.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 

Dictionary<string, string> splits = new Dictionary<string, string>(); 

foreach (var s in splitData) 
{ 
    var temp = s.Trim(); 
    if (splits.ContainsKey(temp)) 
    { 
     splits[temp] += ", " + temp; 
    } 
    else 
    { 
     splits[temp] = temp; 
    } 
} 

string[] result = splits.Select(y => y.Value).ToArray(); 
1

어떻게

var input = "first, middle, middle, middle, middle, last"; 


var outputs = input.Split(',').Select(wrd=>wrd.Trim()) 
           .GroupBy(wrd=>wrd) 
           .Select(lst => string.Join(", ", lst)).ToArray(); 

출력에 대해 [0] = "첫 번째"
출력 [1] = "중간 중간 중간 중간"
출력 [2] = "last"

Select (... Trim())은 분할 후 선행 공백을 제거합니다.
GROUPBY (...)이 세 가지 목록을 제공합니다 ({ "최초의"}, { "중간", "중간", "중간", "중간"}, { "마지막"}
선택 (... 올바른 쉼표로 최종 문자열을 생성) 가입 (...).

HTH,
앨런.

+0

나는이 해결책을 좋아한다. –

+0

@insta 고마워, 나도 그랬다. :) – AlanT

관련 문제