Programing

문자열의 마지막 문자를 삭제

lottogame 2020. 4. 13. 08:10
반응형

문자열의 마지막 문자를 삭제


데이터베이스에 연결된 목록에서 많은 정보를 검색하고 웹 사이트에 연결된 사람을 위해 일련의 그룹을 만들고 싶습니다.

나는 이것을 테스트하기 위해 사용하지만 이것은 동적이 아니므로 정말 나쁘다.

string strgroupids = "6";

지금 이것을 사용하고 싶습니다. 그러나 반환 된 문자열은 다음과 같습니다1,2,3,4,5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

,이후 를 삭제하고 5싶지만 확실히 작동하지 않습니다.


strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN :

String.Remove (Int32) :

이 문자열에서 지정된 위치에서 시작하여 마지막 위치까지 모든 문자를 삭제합니다.


이런 식으로 하는건 어때?

strgroupids = string.Join( ",", groupIds );

많은 청소기.

그것은 내부의 모든 요소를 추가합니다 groupIdsA의 ','각 사이, 그러나 그것은을 넣어하지 ','말.


C #의 문자열은 변경할 수 없습니다. 코드에서 당신이 할 때 strgroupids.TrimEnd(',');또는 문자열은 수정되지 않습니다 .strgroupids.TrimEnd(new char[] { ',' });strgroupids

strgroupids = strgroupids.TrimEnd(',');대신에 뭔가를해야 합니다.

여기 에서 인용 하십시오 :

문자열은 변경할 수 없습니다. 구문을 사용하면 마치 마치 마치 개체를 만든 것처럼 보이더라도 문자열 개체의 내용을 변경할 수 없습니다. 예를 들어,이 코드를 작성할 때 컴파일러는 실제로 새 문자열 시퀀스를 보유 할 새 문자열 객체를 작성하고 해당 새 객체는 b에 할당됩니다. 그런 다음 문자열 "h"는 가비지 수집에 적합합니다.


확장 방법을 추가하십시오.

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

그런 다음 사용하십시오 :

yourString.RemoveLast(",");

후행 쉼표를 제거합니다.

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

이것은 거꾸로입니다. 처음에 쉼표를 추가하는 코드를 작성했습니다. string.Join(",",g)이라고 가정하고 대신 사용해야 g합니다 string[]. 그것보다 더 나은 이름을 줘 g!


각 항목에 쉼표를 추가하는 대신 String.Join을 사용할 수 있습니다.

var strgroupids = String.Join(",",  groupIds);

그러면 배열의 각 요소 사이 에 구분 기호 (이 경우 "" ")가 추가 됩니다.


string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

ForEach여기 에서의 사용 은 일반적으로 "잘못된"것으로 간주됩니다 (예 : http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx 참조 )

LINQ 사용 :

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

서브 스트링이없는 경우 :

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));

sll의 해결책에 추가 : 끝에 공백이있는 경우 문자열을 자르는 것이 좋습니다.

strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);

string.Join더 좋지만 실제로 LINQ를 원한다면 ForEach:

var strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    if(strgroupids != string.Empty){
        strgroupids += ",";
    }

    strgroupids += g;
});

몇 가지 참고 사항 :

  • string.Join그리고 foreach이것보다 훨씬 낫습니다.
  • ,추가되지 않으므로 마지막을 제거 할 필요가 없습니다.
  • 증가 연산자 ( +=)는 문자열에 추가하는 데 편리합니다.
  • .ToString() 문자열이 아닌 문자열을 연결할 때 자동으로 호출되므로 불필요
  • 큰 문자열을 처리 할 때는 문자열 StringBuilder을 연결하는 대신 고려해야합니다.

참고 URL : https://stackoverflow.com/questions/7901360/delete-last-char-of-string

반응형