문자열에서 마지막 세 문자 제거


122

문자열에서 마지막 세 문자를 제거하고 싶습니다.

string myString = "abcdxxx"; 

문자열은 동적 데이터입니다.


1
마지막 3 자 읽기 = 한 가지, 마지막 3 자 제거 = 다른 것. 어느?
Kieren Johnstone 2013

답변:


234

문자열에서 마지막 3 자 읽기 [초기 질문]

string.Substring 을 사용 하고 시작 색인을 제공하면 주어진 색인에서 끝까지 하위 문자열을 얻을 수 있습니다.

myString.Substring(myString.Length-3)

이 인스턴스에서 하위 문자열을 검색합니다. 하위 문자열은 지정된 문자 위치에서 시작합니다. MSDN

업데이트 된 게시물에 대한 수정

문자열에서 마지막 3 자 제거 [업데이트 된 질문]

문자열에서 마지막 세 문자를 제거하려면 string.Substring (Int32, Int32) 를 사용하고 시작 인덱스 0와 끝 인덱스를 string length보다 3 적게 줄 수 있습니다. 마지막 세 문자 앞의 하위 문자열을 가져옵니다.

myString = myString.Substring(0, myString.Length-3);

String.Substring 메서드 (Int32, Int32)

이 인스턴스에서 하위 문자열을 검색합니다. 하위 문자열은 지정된 문자 위치에서 시작하고 지정된 길이를 갖습니다.

또한 String.Remove (Int32) 메서드를 사용하여 시작 인덱스를 length-3 으로 전달하여 마지막 세 문자를 제거 할 수 있습니다.이 지점에서 문자열 끝까지 제거됩니다.

myString = myString.Remove(myString.Length-3)

String.Remove 메서드 (Int32)

지정된 위치에서 시작하여 마지막 위치까지 계속되는 현재 인스턴스의 모든 문자가 삭제 된 새 문자열을 반환합니다.


13
이 때문에 대답하지 않습니다
braks

21
감사합니다 @braks, 처음에 물었던 질문은 "문자열에서 마지막 3 자 읽기"였습니다. 이것은 나중에 편집되었고 저는 몰랐습니다. 질문 편집 기록을 참조하십시오. 귀하의 의견은 질문을 편집 한 후 잘못된 답변을 수정하는 데 도움이되었습니다.
Adil


13

나는이 모든 것을 읽었지만 조금 더 우아한 것을 원했습니다. 문자열 끝에서 특정 수의 문자를 제거하려면 :

string.Concat("hello".Reverse().Skip(3).Reverse());

산출:

"he"

7
이것은 문자열의 길이가 필요하지 않기 때문에 상당히 "창의적"이지만 역방향 작업은 아마도 더 비쌉니다.
Aleksandar

4
문자열을 뒤집는 것은 문자를 세는 것보다 확실히 더 비쌉니다. 완전히 새로운 문자열을 생성 한 다음 원본을 여기에 복사 한 다음 원본 문자열을 가비지 수집해야합니다.
Matt Gregory

@MattGregory 문자열은 변경할 수 없습니다. Remove, Substring, 모든 문자열 함수는 새 문자열을 생성합니다. 원래 포인터를 덮어 쓰면 항상 가비지 컬렉션이 발생합니다. 그러나 이것은 Enumerable.Reverse문자열을 a char[]로 버퍼링 한 다음 char[]3 더 짧은 new로 버퍼링 한 다음 new string(내부적으로 다른 char[]) 를 생성하므로 여전히 느립니다 . 더 나은 접근 방식은 new string("hello".Reverse().Skip(3))이거나 AllBut(this string in, int i)Substring을 사용하는 자체 문자열 확장 함수 를 작성하는 것 입니다.
Wolfzoon

@MattGregory 문자열의 문자를 "계수"하는 것이 아니라 문자열에 Length저장되어 있습니다.
Wolfzoon

1
이제 우리는 .SkipLast(n). 아무것도 되돌릴 필요가 없습니다. "hello".SkipLast(3)제공"he"
AjitZero



5

String.Remove지정된 위치에서 문자열 끝까지 삭제 하는 데 사용할 수 있습니다 .

myString = myString.Remove(myString.Length - 3);

4

"동적 데이터"라고 말했기 때문에 정확히 찾고있는 것은 아니지만 예제 문자열이 주어지면 다음과 같이 작동합니다.

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

문자열에서 마지막 문자 제거

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)// 인덱스 10에서 끝까지 텍스트를 제거하는 데 사용됩니다.


1

새로운 C # 8.0 범위 연산자는이를 달성하기위한 훌륭한 지름길입니다.

예:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()해당 색인에서 끝까지 모든 항목을 제거합니다. items.length - 3끝에서 색인 3자를 가져옵니다.


0

쉬운. text = text.remove(text.length - 3). Remove함수가 해당 색인에서 문자열의 끝까지 모든 항목을 제거 하기 때문에 3을 뺍니다 text.length. 따라서 3을 빼면 3 개의 문자가 제거 된 문자열을 얻습니다.

이것을 일반화하여 다음 a과 같이 문자열 끝에서 문자 를 제거 할 수 있습니다 .

text = text.remove(text.length - a) 

그래서 제가 한 것은 같은 논리였습니다. 이 remove함수는 내부에서 텍스트 길이 인 문자열의 끝까지 모든 항목을 제거합니다. 따라서 a문자열의 길이에서 빼면 a문자가 제거 된 문자열을 얻을 수 있습니다.

따라서 3에 대해서만 작동하는 것이 아니라 모든 양의 정수에 대해 작동합니다. 단, 문자열 길이가보다 작거나 같으면 a음수 또는 0을 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.