문자열의 처음 다섯 문자를 얻는 방법


133

문자열의 첫 번째 문자를 얻기 위해이 질문을 읽었습니다 . C #의 문자열에서 처음 n 개의 문자를 얻는 방법이 있습니까?


앞의 질문은 char** s 에 대해 묻는 것이며 ** characters에 대해 묻는 것 입니다. 그들은 같은 것이 아닙니다. 𣊾그리고 𣇞프로그래머가 사이의 차이를 몰라서 사용 된 C # I로 작성 소프트웨어에서 실패 난 그냥 어제 사용하는 데 필요한 두 개의 문자입니다 char및 문자가. 이 함정에 빠지지 마십시오!
hippietrail

답변:


218

Enumerable 을 사용할 수 있습니다 .

char[] array = yourStringVariable.Take(5).ToArray();

또는 String.Substring 을 사용할 수 있습니다 .

string str = yourStringVariable.Substring(0,5);

String.Substring문자열 길이가 필요한 문자보다 작은 경우 예외 가 발생할 수 있습니다.

결과를 문자열로 되돌리려면 다음을 사용할 수 있습니다.

  • 문자열 생성자와 LINQ 사용 Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

접근 방식의 플러스는 미리 길이를 확인하지 않습니다.

  • 다른 방법은 String.Substring오류 검사와 함께 사용하는 것 입니다

처럼:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
문자열 val = new string (yourStringVariable.Take (6) .ToArray ()); 그러나 yourStringVariable의 길이가 5보다 작 으면 하위 문자열이 오류가 발생합니다.
Moji

1
IsNullOrWhiteSpace여기가 잘못되었습니다. 10 개의 공백이있는 문자열을 고려하십시오. 코드는 10을 모두 반환합니다. IsNullOrEmpty대신 사용하십시오 . ( IsNullOrWhiteSpace다른 테스트와 함께 사용하는 것은 좋지 않습니다 . 대신 null + empty를 Trim테스트 한 다음 동작이 지정된 경우 필요한 테스트 / 작업을 수행하십시오.)
ToolmakerSteve

1
String.Concat ()을 사용하여 ToArray ()에 대한 호출을 저장할 수 있습니다. string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

하위 문자열 을 사용할 수 있습니다 (int startIndex, int length)

string result = str.Substring(0,5);

하위 문자열은 지정된 문자 위치에서 시작하며 지정된 길이를 갖습니다. 이 방법은 현재 인스턴스의 값을 수정하지 않습니다. 대신 현재 문자열 인 MSDN 의 startIndex 위치에서 시작하여 길이 문자가 포함 된 새 문자열을 반환합니다.

소스 문자열이 5 자 미만이면 어떻게됩니까? 위의 방법을 사용하면 예외가 발생합니다. 문자열의 문자 수가 5보다 많은지 확인하고 하위 문자열을 통해 처음 5 개를 얻는 조건을 넣을 수 있습니다. 참고 소스 문자열을 firstFiveChar 변수에 할당했습니다. 문자가 5보다 작 으면 firstFiveChar가 변경되지 않으므로 부분이 필요하지 않습니다.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

아무도 사용할 때 적절한 검사를 수행하는 방법에 대해 언급하지 않았 Substring()으므로 그것에 기여하고 싶었습니다.

을 사용 Linq하고 싶지 않으면 Substring()문자열이 Substring()함수 의 두 번째 매개 변수 (길이)보다 큰지 확인해야합니다 .

처음 5자가 필요하다고 가정 해 봅시다. 다음과 같이 적절한 검사를 받아야합니다.

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

이 검사가 없으면 Substring()함수는 존재하지 않는 문자를 반복하므로 예외가 발생합니다.

나는 당신이 아이디어를 얻는다고 생각합니다 ...


사랑스러운 추가 정보
Rob85

나는 당신이 그것을 좋아해서 기쁘다.
ilter December

이것은 나에게 많은 도움이되었지만 그 라인에서 정확히 무엇을하고 있는지 설명 할 수 있습니까?
jimbob

하위 문자열에 대한 몇 가지 예를 확인합니다. 인덱스에 대한 매개 변수를 사용합니다. 시작 인덱스는 0입니다. 배열의 마지막 인덱스보다 더 큰 (또는 그 문제에 대해서는 더 작은) 것을 쓰면 인덱스에서 예외가 발생합니다. 이 예에서 해당 검사는 해당 예외를 피하기위한 것입니다.
ilter

하 하하하! :) 내가 대답 한 질문이었습니다. 그 질문에 대답하지 않았어야합니까? :)
ilter

18

문제 .Substring(,)는 주어진 문자열에 요청한 문자 수 이상의 길이 ArgumentOutOfRangeException가 있어야 한다는 것입니다. 그렇지 않으면가 발생합니다.

해결 방법 1 ( '하위 문자열'사용) :

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

사용의 단점은 .Substring(주어진 문자열의 길이를 확인해야한다는 것입니다.

해결 방법 2 ( 'Take'사용) :

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

'Take'를 사용 하면 주어진 문자열의 길이를 확인할 필요가 없습니다.


13

PadRight 함수를 사용하여 문자열이 너무 짧아지지 않도록하고 필요한 것을 잡고 한 줄로 끝부터 공백을 잘라냅니다.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
이것은 지금까지 더 나은 솔루션입니다. 문자열 길이가 하위 문자열 길이보다 작은 경우 하위 문자열 만 사용하면 오류가 발생할 수 있습니다.
Asiri Dissanayaka

SQL Server에서 사용하는 LEFT 기능에 대한 최상의 대안
vibs2006

11

아무도 왜 이것을 언급했는지 모르겠습니다. 그러나 이것을 달성하는 가장 짧고 간단한 방법입니다.

string str = yourString.Remove(n);

n -필요한 문자 수

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
내부적으로 "this.Substring (0, 5)"와 동일하므로 문자열의 길이가 올바른지 확인해야합니다.
PersyJack

처음 n자를 원하는 경우 문자열 길이를 아는 경우에만 작동합니다. 길이가 변경 될 수 있으면 항상 작동하지는 않습니다. 나는 그것이 대부분의 사람들에게 명백한 것을 알고 있지만, 그것을 지나가는 사람에 대해서만 언급하고 있습니다.
user1289451

10

공백 문자 5 개를 추가 한 후 처음 5자를 잘라 내고 결과를 자릅니다. 추가하는 공백의 수는 절단하는 숫자와 일치해야합니다. 앞에 괄호를 포함 시키십시오 .Substring(0,X). 그렇지 않으면 아무 것도 추가하지 않습니다.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

이 기술을 사용하면 ArgumentOutOfRangeException다른 답변 에서 언급 한 것에 대해 걱정할 필요가 없습니다 .


1
젠장, 나는 그것을 게시하려고했다!! 공감. (2019 년, 왜 1985 년 Mid $가했는지 문자열에 대한 방법이 없을까요? '당신은 그렇게해서는 안됩니다.' 그것을 ...)
FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
변수 "str"의 길이가 5보다 작 으면 오류가 발생합니다
Moji

6

C # 8.0에서이를 수행하는 새로운 방법이 있습니다. 범위 연산자

Microsoft 문서

또는 em이라고 부르는 것처럼 Pandas 슬라이스.

옛날 방식 :

string newString = oldstring.Substring(0, 5);

새로운 길:

string newString = oldstring[..5];

언뜻보기에 짧은 코드에 대한 가독성이 다소 좋지 않은 트레이드 오프처럼 보이지만 새로운 기능은

  1. 배열 (따라서 문자열)을 슬라이스하기위한 표준 구문
  2. 이런 멋진 것들 :

    var slice1 = list [2 .. ^ 3]; // 목록 [Range.Create (2, Index.CreateFromEnd (3))]

    var slice2 = list [.. ^ 3]; // 목록 [Range.ToEnd (Index.CreateFromEnd (3))]

    var slice3 = list [2 ..]; // 목록 [Range.FromStart (2)]

    var slice4 = 목록 [..]; //리스트 [Range.All]


3

C #의 문자열에서 처음 n 개의 문자를 얻으려면

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

다음은 문자열이 필요한 것보다 큰지 확인하고 문자열을 정의 된 최대 문자 수로 줄이고 '...'를 추가하는 확장 방법입니다.

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

나는 사용한다:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

또는 Null 대신 공백을 확인하려는 경우 대안 :

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

또는 String.ToCharArray () 사용할 수 있습니다 .
그것은 필요 int startindex와 및 int length매개 변수와 리턴로char[]

new string(stringValue.ToCharArray(0,5))

문자열의 길이가 적절한 지 확인해야합니다. 그렇지 않으면 ArgumentOutOfRangeException


1

str이 5보다 작을 때이 코드를 사용해보십시오.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

모든 필드에서 처음 5 자만 원하면 Left Attribute로이를 달성 할 수 있습니다.

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

위의 답변을 시도했지만 최선이라고 생각합니다.

@item.First_Name.Substring(0,1)

이것에서 나는 문자열의 첫 글자를 얻을 수 있습니다

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