2016-07-08 4 views
0

가 null의 경우 구분 기호를 필요로하지 않는 값을 후행 문자열의 목록을 가입 말 :권리 가장 값이 내가 문자열 목록이있는 경우 캔트 주위에 내 머리를 얻을 무엇 메신저 달성하기 위해 노력하고 있지만,

{"test","","data","","123","44"} 

이것은 문자에 합류해야합니다

test::data::123:44 

하지만

끝에있는 목록이 비어 해달라고 인 경우 구분이

{"test","","data","","",""} 

은 다음과 같아야합니다

test::data 

{"test","","","","",""} 

가 있어야한다 :

test 

{"test","","","","","44"} 

가 있어야한다 :

test::::44 

목록 복잡성의 또 다른 레벨을 추가 길이를 변화 될 수 있지만. 배열하는 최초의

+0

[빈 문자열을 무시하는 [String.Join 메서드]의 복제본이 있습니까?] (http://stackoverflow.com/questions/16325) 935/string-join-method-that-ignores-empty-strings) – eugeneK

+0

그게 내가 빈 문자열을 무시하고 싶지 않기 때문에 내가 찾고있는 것이 아니다. 단지 빈 문자열을 무시하기를 원한다. – Houlahan

답변

1

그냥 목록 Count에서 후행 빈 요소를 제외하고 Take를 사용하여 남아있는 다음 Join :

List<string> input = ...; 
int count = input.Count; 
while (count > 0 && string.IsNullOrEmpty(input[count - 1])) 
    count--; 
var output = string.Join(":", input.Take(count)); 

List<T> 특정 FindLastIndex 방법을 사용하여, 그것은 다음과 같은 "하나 라이너 '로 줄일 수있다 :

var output = string.Join(":", 
    input.Take(input.FindLastIndex(s => !string.IsNullOrEmpty(s)) + 1)); 
+0

! 고마워요 – Houlahan

+0

당신은 LINQ 스타일의 모든 것을 할 수있는 내 (이전) 대답을 참조하십시오 ... – Amit

+1

@ 오른쪽. 그러나 문제는 'linq'이 아니라 'list'라고 태그가 붙습니다. 어떤 특정 목록 방법이 있다는 것을 상기시켜주었습니다. 감사합니다. :) –

1

, "테스트"배열입니다

test = test.Where(x => !string.IsNullOrEmpty(x)).ToArray(); 

. 다음

:

string.Join("::", test); 

편집 : 식별하여

string[] strs = myString.split(someDelimeter, StringSplitOptions.RemoveEmptyEntries); 
1
var obj = {"test","","data","","123","44"}; 
    var count = obj.Count; 

    for (var i = count - 1; i > -1; i--) 
    { 
    if (obj[i]==String.Empty) { 
     obj.RemoveAt(i); 
    } 
    else break; 
    } 

    var arr = obj.Split(new char[] { ','}, StringSplitOptions.RemoveEmptyEntries); 

    var output = arr.Join(":", arr); 
+0

내 입력은 그렇지 않다. JSON 값은 문자열의 단지 목록입니다. EDIFACT D96a의 경우 가장 오른쪽 값이 null 인 경우 후행 값에 구분 기호가 필요하지 않습니다. – Houlahan

+0

은 내 대답을 업데이트했습니다. 희망이 작동합니다. 물론 – Venky

1

시작 :

다른 문자열을 분할하여 문자열 배열을 얻는 경우

, 다음 사항을 고려 마지막으로 원하는 요소를 선택하고 평소와 같이 목록을 슬라이스하고 가입하십시오.

var lastElementIndex = strings.Select((s, index) => string.IsNullOrEmpty(s) ? -1 : index).Max(); 
var prefix = strings.Take(lastElementIndex + 1); 
var result = string.Join(":", prefix); 
관련 문제