2011-01-23 2 views
6

내 문자열이 Visual Studio 개체 뷰어를 사용하여 참조하십시오.문자열에 개행 문자가있는 곳을 감지 :

"_profileIconId = 5\n   elo" 

줄 바꿈이 시작되는 위치부터 텍스트를 가져 오려면 어떻게해야합니까?

다음은 시도한 것이지만 IndexOf() 메서드는 -1을 반환하며 줄 바꿈을 찾을 수 없음을 의미합니다.

var stringEx = "_profileIconId = 5\n   elo"; 
var x = stringEx.IndexOf(Environment.NewLine); 
stat.Name = tempName.Substring(0,x); 

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

+0

것은 Windows에서 실행하고 있습니까? –

+0

Windows 7. (패딩) –

+0

@Sergio CR + LF에 도착했습니다. \ r \ n Windows linebreak 대 * nix 단일 문자 줄 바꿈이 있지만 지금은 답을 얻었습니다! –

답변

12

Environment.NewLine\r\n (캐리지 리턴 + 줄 바꿈)을 나타 내기 때문입니다. 반면에 원본 문자열에는 줄 바꿈 만 있습니다. 여기에 두 번째 줄을 변경 : Windows 플랫폼에서 실행하는 경우

var x = stringEx.IndexOf("\n"); 
1

, Environment.NewLine는 "\ r에 \ n을"를 찾습니다.

대신 \ n을 찾고 시도해보십시오

var x = stringEx.IndexOf("\n"); 
5

그냥 문자열의 첫 번째 라인을 원한다면, 당신이 할 수있는 : 다양한 라인 브레이크와

static string GetFirstLine(string text) 
{ 
    using (var reader = new StringReader(text)) 
    { 
     return reader.ReadLine(); 
    } 
} 

StringReader 클래스 상품 당신을위한 시나리오. the MSDN documentation에서 :

라인은 라인 피드 ("\ n")를 다음 일련의 문자, 캐리지 리턴 ("\ r")이 나 캐리지 리턴 정의 즉시 따라 줄 바꿈 ("\ r \ n"). 물론

, (나는 그것이 큰 것을 의심하지만) 새 StringReader 객체를 구성하는 오버 헤드를 원하지 않는 경우, 당신은 비슷한 자신을 구현할 수 :

static string GetFirstLine(string text) 
{ 
    int? newlinePos = GetIndex(text, "\r") ?? GetIndex(text, "\n"); 

    if (newlinePos.HasValue) 
    { 
     return text.Substring(0, newlinePos.Value); 
    } 

    return text; 
} 

// Not really necessary -- just a convenience method. 
static int? GetIndex(string text, string substr) 
{ 
    int index = text.IndexOf(substr); 
    return index >= 0 ? (int?)index : null; 
} 
0

여기에 일반적인 방법입니다을 문자열에서 후 새로운 라인 모두를 제거 할 것이다 이렇게 만에 새 라인이 문자열에 존재하는 경우에만 :

int x = stringEx.IndexOf("\n"); 

if (x > 0) { 
    stringEx= stringEx.Remove(x); 
} 
관련 문제