Development Tip

stringbuilder로 빌드 된 문자열에서 마지막 문자를 제거하는 가장 좋은 방법

yourdevel 2020. 10. 17. 12:29
반응형

stringbuilder로 빌드 된 문자열에서 마지막 문자를 제거하는 가장 좋은 방법


나는 다음이있다

data.AppendFormat("{0},",dataToAppend);

이것의 문제는 내가 루프에서 사용하고 있고 시험용 쉼표가 있다는 것입니다. 후행 쉼표를 제거하는 가장 좋은 방법은 무엇입니까?

데이터를 문자열 하위 문자열로 변경해야합니까?


가장 간단하고 효율적인 방법 은 다음 명령을 수행하는 입니다.

data.Length--;

이렇게하면 포인터 (즉, 마지막 인덱스)를 한 문자 뒤로 이동하지만 개체의 변경 가능성은 변경하지 않습니다. 사실, a를 지우는 StringBuilder것도 가장 좋은 방법입니다 Length(그러나 실제로 Clear()구현이보기 때문에 명확성을 위해 메서드를 사용하십시오 ).

data.Length = 0;

다시 말하지만 할당 테이블을 변경하지 않기 때문입니다. 이 바이트를 더 이상 인식하고 싶지 않다고 생각하십시오. 이제를 호출 할 때도 ToString(), 그 이후의 어떤 것도 인식 Length하지 못합니다. 그것은 당신이 제공하는 것보다 더 많은 공간을 할당하는 변경 가능한 객체이며, 단순히 이런 방식으로 구축되었습니다.


그냥 사용

string.Join(",", yourCollection)

이렇게하면 StringBuilder및 루프 가 필요하지 않습니다 .


루프 후에 다음을 사용하십시오.

.TrimEnd(',')

또는 단순히 변경

string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)

이것은 어떤가요..

string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);

나는 stringbuilder의 길이를 조작하는 것을 선호합니다.

data.Length = data.Length - 1;

루프 알고리즘을 변경하는 것이 좋습니다.

  • 항목 뒤가 아니라 앞에 쉼표를 추가하십시오.
  • false로 시작하는 부울 변수를 사용하고 첫 번째 쉼표를 억제하십시오.
  • 테스트 후이 부울 변수를 true로 설정하십시오.

string.Join메서드를 사용하여 항목 모음을 쉼표로 구분 된 문자열로 바꿔야 합니다. 선행 또는 후행 쉼표가 없는지 확인하고 문자열이 효율적으로 구성되도록 보장합니다 (불필요한 중간 문자열없이).


예, 루프가 완료되면 문자열로 변환하십시오.

String str = data.ToString().TrimEnd(',');

두 가지 옵션이 있습니다. 첫 번째는 매우 사용하기 쉬운 Remove방법으로 매우 효과적입니다. 두 번째 방법은 ToString시작 색인 및 끝 색인과 함께 사용하는 것 입니다 ( MSDN 문서 ).


여기에 비슷한 질문이 있습니다.

나는 StringBuilder 확장 방법을 사용하는 것을 좋아했습니다.

RemoveLast 메서드


가장 간단한 방법은 Join () 메서드를 사용하는 것입니다.

public static void Trail()
{
    var list = new List<string> { "lala", "lulu", "lele" };
    var data = string.Join(",", list);
}

StringBuilder가 정말로 필요한 경우 루프 뒤의 끝 쉼표를 잘라냅니다.

data.ToString().TrimEnd(',');

참고URL : https://stackoverflow.com/questions/17215045/best-way-to-remove-the-last-character-from-a-string-built-with-stringbuilder

반응형