2012-10-02 4 views
1

.NET 3.5에서 TrimEnd()와 일치하지 않는 결과가 나타납니다. TrimEnd 내가 여기에서 잘못하고 있어요 뭔가가 사용하기 간단 보인다하거나 당신은 '때로 믿을 버그"TrimEnd()"... 결과가 예기치 않은 결과가 너무 많습니다.

성공 사례

var foundvalue = "hosted.local.chatter.com"; 
    Console.WriteLine(foundvalue.TrimEnd(".chatter.com".ToCharArray())); 
    // Result is "hosted.local" which is expected. 

실패 사례

var foundvalue = "hosted.local.chattermailcom"; 
Console.WriteLine(foundvalue.TrimEnd(".chattermailcom".ToCharArray())); 
// Result is "hosted" which is incorrect 
+0

와우 ... 제로 upvotes를. 나는 모두가 나를 제외하고 그것을 알고 있었다고 생각한다! 이것은 당신이 독학을 할 때 일어나는 일입니다 (S.O.에 대한 많은 읽기와 함께) – LamonteCristo

답변

4

아마 당신은 그것을 위해 자신 만의 방법을 쓸 수있다 :

public static class Extensions 
{ 
    public static string RemoveEnd(this string strBefore, string substringToRemove) 
    { 
    if (!strBefore.EndsWith(substringToRemove)) 
     return strBefore; 

    return strBefore.Remove(strBefore.Length - substringToRemove.Length); 
    } 
} 
10

입니다 올바른 문자열 인 ".chattermailcom"을 끝에서 제거하면 '.', 'c', 'a', 't', 'e', ​​'r'등의 문자가 끝에서부터 제거됩니다. 문자열. ".chattermailcom"local에있는 모든 문자를 가지고 있지만 ".chatter.com"은 없습니다 (키 문자는 l입니다).

끝에서 전체 문자열을 제거하려면 확인을 위해 EndsWith을 사용하고 그 다음에 substring을 사용하는 것이 좋습니다.

문자열 조작을 완전히 피하고 URI 클래스를 사용할 수도 있습니다. 그것은 당신을 위해 전체 URL을 구문 분석하고 다양한 구성 요소를 반환 할 수 있습니다.

2

왜 당신을 놀라게합니까? TrimEnd는 끝에서 제거 할 문자 배열을 사용합니다. 당신은 모든 '.', 'c', 'h', 'a', 't'등을 제거하라고 명령합니다. 그리고 정확히 왜 문자열에 ".local" 그들은 제거 될 것이다. TrimEnd()가 무엇을하는지 다시 읽어보십시오.

6

documentation에 따르면 TrimEnd은 전달한 배열에있는 문자열의 끝에서 모든 문자를 제거합니다. 두 번째 경우에는 "d"가 배열의 일부가 아니므로 메서드가 여기에서 중단됩니다.

1

TrimEnd는 문자열을 제거하도록 설계되지 않았습니다. "local"이라는 단어는 trimEnd 문자 ("chattermailcom"-> l, o, c, a 및 l 포함)에있는 모든 문자를 포함합니다. trimEnd의 예상되는 동작을 얻고 있습니다.

String.TrimEnd Method (MSDN):

TrimEnd 메서드는 현재 문자열 trimChars 매개 변수에있는 모든 후행 문자에서 제거

. 트림 작업 은 trimChars에없는 첫 번째 문자가 문자열 끝에 과 마주 칠 때 중지합니다. 예를 들어, 현재 문자열이 "123abc456xyz789"이고 trimChars가 "1"에서 "9"까지의 숫자를 포함하면 TrimEnd 메서드는 "123abc456xyz"를 반환합니다.

관련 문제