마지막 대시의 오른쪽에 모든 문자 가져 오기


114

다음이 있습니다.

string test = "9586-202-10072"

-10072가되도록 모든 문자를 최종 오른쪽에 가져 오려면 어떻게해야합니까? 문자 수는 항상 마지막 대시의 오른쪽에 다릅니다.

어떻게 할 수 있습니까?

답변:


236

당신은 마지막의 위치를 얻을 수 -와를 str.LastIndexOf('-'). 따라서 다음 단계는 분명합니다.

var result = str.Substring(str.LastIndexOf('-') + 1);

수정 :

Brian이 아래에 언급했듯이 대시가없는 문자열에 이것을 사용하면 동일한 문자열이 반환됩니다.


1
이것은 하이픈이 마지막 문자 인 경우에도 작동하며이 경우 빈 문자열을 올바르게 반환합니다. 둘 중 하나 str가 null이거나 하이픈이 전혀 포함되지 않은 경우 에만 실패 합니다. (하이픈이없는 경우 던지지 않고 전체 소스 문자열을 반환합니다.)
LukeH

@LukeH : 머리를 올려 주셔서 감사합니다. 나는 확인하지 않았고 그것이 던질 것이라고 잘못 생각했습니다.
Jon

3
글쎄, LastIndexOf아무것도 발견되지 않으면 -1을 반환합니다 (이것은 문서화 된 동작이므로 그것에 의존하는 것이 안전합니다). str.Substring(1-1)와 같은 문자열을 제공합니다 str. 놀라운 일이 아닙니다.
Brian

2
@Brian : 똑같은 사소한 진술에서 대부분의 실수에 대해 기록을 깼다 고 생각합니다. 교훈 : 사후에 코드를 교정하지 않고는 아무것도 작성하지 마십시오. 감사.
Jon

57

LINQ를 사용하고 명시 적 구문 분석을 절약 할 수 있습니다.

string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();

Console.WriteLine(lastFragment);

5
이것은 아마도 대부분의 개발자 시간을 절약 할 수 있지만, 일반적인 경우에 이와 같은 코드는 많은 문자열 할당 (위의 예에서는 4 개 정도)이 될 것이므로 성능이 중요한 섹션에서는 강조되지 않을 수 있습니다.
Charles Burns

5
string tail = test.Substring(test.LastIndexOf('-') + 1);

4
YourString.Substring(YourString.LastIndexOf("-"));

4
끝에 "+ 1"을 제외하면 출력에 문자열과 함께 특수 문자가 포함됩니다.
Meena

3

이 게시물이 46,000 회 이상 조회 된 것을 알 수 있습니다. 46,000 명의 시청자 중 많은 사람들이 단순히 파일 이름을 원하기 때문에이 질문을하고있을 것입니다 ... 그리고 at 기호를 사용하여 부분 문자열을 축 어적으로 만들 수 없다면이 답변은 토끼 구멍이 될 수 있습니다.

단순히 파일 이름을 얻고 싶다면 여기에 언급해야 할 간단한 대답이 있습니다. 질문에 대한 정확한 답이 아니더라도.

result = Path.GetFileName(fileName);

참조 https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx를




1
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");

if (indexOfHyphen >= 0)
{
    string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
    Console.WriteLine(contentAfterLastHyphen );
}

0

나는 이것에 대한 문자열 확장을 만들었습니다.

public static string GetStringAfterChar(this string value, char substring)
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
            var index = value.LastIndexOf(substring);
            return index > 0 ? value.Substring(index + 1) : value;
        }

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