[C#] String 클래스의 어떤 메소드가 첫 번째 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));
}


답변

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

이 솔루션은 n이 s.Length보다 크면 여전히 올바른 일을한다는 점에서 작은 보너스를받습니다.


답변

당신은 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 #에서 문자열 조작을 수행해야 할 때마다 Visual Basic의 이전 기능 LeftRight함수가 누락 되어 사용하기가 훨씬 간단합니다 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));
    }
}

참고 : 때문에 부분이 를 throw 이미 이전 답변에서 일부 의견에 언급 된 입력 문자열의 길이가 요청 된 길이보다 작은 경우.
Math.MinSubstringArgumentOutOfRangeException

용법:

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는 시스템 정의 방법이므로 삼항 연산자는 순환 복잡도 = 1이지만 if () {} else {}의 값은 2이므로 다음과 같이 도움이됩니다.

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