programing

문자열 클래스에서 처음 N자만 반환하는 메서드는 무엇입니까?

linuxpc 2023. 7. 25. 20:42
반응형

문자열 클래스에서 처음 N자만 반환하는 메서드는 무엇입니까?

나는 확장 방법을 작성하고 싶습니다.String입력 문자열이 제공된 길이보다 길 경우 클래스N최초의 것만N문자가 표시됩니다.

다음과 같이 표시됩니다.

public static string TruncateLongString(this string str, int maxLength)
{
    if (str.Length <= maxLength)
        return str;
    else
        //return the first maxLength characters                
}

무엇을String.*()첫 번째 방법만 얻는 데 사용할 수 있습니다.N의 특징.str?

public static string TruncateLongString(this string str, int maxLength)
{
    if (string.IsNullOrEmpty(str)) return str;

    return str.Substring(0, Math.Min(str.Length, maxLength));
}

C# 8 이상에서는 Range(범위)를 사용하여 다음과 같이 씁쓸하게 만드는 것도 가능합니다.

public static string TruncateLongString(this string str, int maxLength)
{
    return str?[0..Math.Min(str.Length, maxLength)];
}

다음은 식 본문을 사용하여 더 줄일 수 있습니다.

public static string TruncateLongString(this string str, int maxLength) =>
    str?[0..Math.Min(str.Length, maxLength)];

참고 null-조건부 연산자(?)이 사건을 처리하기 위해 존재합니다.strnull입니다.이렇게 하면 명시적 null 검사가 필요하지 않습니다.

string truncatedToNLength = new string(s.Take(n).ToArray());  

이 솔루션은 n이 s보다 클 경우 약간의 추가 효과가 있습니다.길이, 여전히 옳은 일을 합니다.

LINQ를 사용할 수 있습니다.str.Take(n)또는str.SubString(0, n)후자가 던질 곳.ArgumentOutOfRangeException에 대한 예외.n > str.Length.

LINQ 버전은 다음을 반환합니다.IEnumerable<char>그래서 당신은 변환해야 할 것입니다.IEnumerable<char>로.string:new string(s.Take(n).ToArray()).

C#에서 문자열 조작을 해야 할 때마다, 나는 좋은 옛것이 그립습니다.Left그리고.RightVisual Basic의 기능은 보다 사용하기가 훨씬 간단합니다.Substring.

대부분의 C# 프로젝트에서 다음과 같은 확장 방법을 만듭니다.

public static class StringExtensions
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }

    public static string Right(this string str, int length)
    {
        return str.Substring(str.Length - Math.Min(length, str.Length));
    }
}

참고:
Math.Min부분은 거기에 있습니다 왜냐하면Substring던지다, 던지다, 던지다, 던지다ArgumentOutOfRangeException입력 문자열의 길이가 요청된 길이보다 작을 경우, 이전 답변 아래의 일부 주석에서 이미 언급한 것과 같습니다.

용도:

string longString = "Long String";

// returns "Long";
string left1 = longString.Left(4);

// returns "Long String";
string left2 = longString.Left(100);

단순:

public static String Truncate(String input,int maxLength)
{
   if(input.Length > maxLength)
      return input.Substring(0,maxLength);
   return input;
}
public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}

유효성 검사에 대해서도 Null 문자열 항목을 확인하지 않은 이유를 설명합니다.구체적인 이유는?

IsNullOrEmpty는 시스템 정의 메서드이고 3항 연산자는 순환 복잡도 = 1인 반면, 0이 되면 {}이(가) 2인 다른 경우 {}은(는) 아래의 도움말이 있다고 생각합니다.

    public static string Truncate(string input, int truncLength)
    {
        return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
                   ? input.Substring(0, truncLength)
                   : input;
    }

C# 8과 함께

public static string TruncateLongString(this string str, int maxLength)
{
    if (string.IsNullOrEmpty(str)) return str;

    return str[.. Math.Min(str.Length, maxLength)];
}

제가 이것을 제 프로젝트에 추가한 이유는 제가 사용하는 곳이 온라인으로 호스팅되는 프로젝트에서 루프에 사용될 가능성이 높기 때문입니다. 그래서 제가 관리할 수 있다면 충돌이 일어나지 않기를 바랬습니다.길이가 제가 가지고 있는 칼럼에 맞습니다.C#7입니다.

한 줄만:

 public static string SubStringN(this string Message, int Len = 499) => !String.IsNullOrEmpty(Message) ? (Message.Length >= Len ? Message.Substring(0, Len) : Message) : "";

.NET Substring 메서드는 위험이 많습니다.저는 다양한 시나리오를 처리하는 확장 방법을 개발했습니다.좋은 점은 원래 동작을 유지하지만 "참" 매개 변수를 추가하면 확장 메서드에 의존하여 예외를 처리하고 인덱스와 길이를 기준으로 가장 논리적인 값을 반환한다는 것입니다.예를 들어, 길이가 음수이고 거꾸로 카운트되는 경우.https://dotnetfiddle.net/m1mSH9 에서 매우 다양한 값으로 테스트 결과를 볼 수 있습니다. 이를 통해 서브스트링을 해결하는 방법에 대한 명확한 정보를 얻을 수 있습니다.

저는 항상 제 모든 프로젝트에 이러한 방법을 추가하며, 무언가가 변경되고 색인이 유효하지 않기 때문에 코드 파괴에 대해 걱정할 필요가 없습니다.아래는 코드입니다.

    public static String Substring(this String val, int startIndex, bool handleIndexException)
    {
        if (!handleIndexException)
        { //handleIndexException is false so call the base method
            return val.Substring(startIndex);
        }
        if (string.IsNullOrEmpty(val))
        {
            return val;
        }
        return val.Substring(startIndex < 0 ? 0 : startIndex > (val.Length - 1) ? val.Length : startIndex);
    }

    public static String Substring(this String val, int startIndex, int length, bool handleIndexException)
    {
        if (!handleIndexException)
        { //handleIndexException is false so call the base method
            return val.Substring(startIndex, length);
        }
        if (string.IsNullOrEmpty(val))
        {
            return val;
        }
        int newfrom, newlth, instrlength = val.Length;
        if (length < 0) //length is negative
        {
            newfrom = startIndex + length;
            newlth = -1 * length;
        }
        else //length is positive
        {
            newfrom = startIndex;
            newlth = length;
        }
        if (newfrom + newlth < 0 || newfrom > instrlength - 1)
        {
            return string.Empty;
        }
        if (newfrom < 0)
        {
            newlth = newfrom + newlth;
            newfrom = 0;
        }
        return val.Substring(newfrom, Math.Min(newlth, instrlength - newfrom));
    }

저는 2010년 5월에 http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html 에서 이에 대해 블로그를 했습니다.

(LINQ 여기에 "와 "LINQ"를 두 개의 한 줄이 .int maxLength음의 값을 허용하는 것에 대한 경고 및 null 문자열의 경우:

  1. Substringway (루안의 대답에서):
public static string Truncate(this string s, uint maxLength) =>
    s?.Substring(0, Math.Min(s.Length, (int)maxLength));
  1. Removeway (크브리밍턴의 대답에서):
public static string Truncate(this string s, uint maxLength) =>
    s?.Length > maxLength ? s.Remove((int)maxLength) : s;
string text = "1234567";
var x = text.Substring(0, text.Length>5?6:text.Length);
substring(int startpos, int lenght);

string.하위 문자열(0,n); // 0 - 시작 인덱스 및 n - 문자 수

언급URL : https://stackoverflow.com/questions/3566830/what-method-in-the-string-class-returns-only-the-first-n-characters

반응형