[c#] C #의 문자열에서 마지막 문자를 제거합니다. 우아한 방법?

이와 같은 숫자 문자열이 2223,00있습니다. 나는 그것을 2223. 이것은 ” ,뒤에 정보가 없습니다 . ” , ” 뒤에 소수 두 자리 만 있다고 가정합니다 .

나는했다 :

str = str.Remove(str.Length - 3, 3);

더 우아한 해결책이 있습니까? 다른 기능을 사용할까요? -명시적인 숫자를 넣는 것을 좋아하지 않습니다-



답변

실제로 하나의 매개 변수를 사용하는 Remove 오버로드를 사용할 수 있습니다.

str = str.Remove(str.Length - 3);

그러나 길이를 하드 코딩하지 않으려면 다음을 사용할 수 있습니다.

str = str.Remove(str.IndexOf(','));


답변

아마도 이것은 :

str = str.Split(",").First();


답변

이것은 쉼표 뒤의 모든 것을 제외한 문자열을 반환합니다.

str = str.Substring(0, str.IndexOf(','));

물론 이것은 문자열에 실제로 소수점이있는 쉼표가 있다고 가정 합니다. 그렇지 않으면 위의 코드는 실패합니다. 더 많은 확인을 원합니다.

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)

나는 당신이 시작하는 문자열로 작업하고 있다고 가정하고 있습니다. 이상적으로는 float 또는 double과 같이 시작할 숫자로 작업하는 경우으로 캐스팅 int한 다음 다음 myInt.ToString()과 같이 할 수 있습니다.

myInt = (int)double.Parse(myString)

이것은 현재 문화를 사용하여 double을 구문 분석합니다 (여기서는 미국에서는 .소수점으로 사용 ). 그러나 이것은 다시 입력 문자열을 구문 분석 할 수 있다고 가정합니다.


답변

String.Format("{0:0}", 123.4567);      // "123"

초기 값이 10 진수 인 경우 문자열로 변환해야합니다.

String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture))  //3.5

이 예에서는 Invariant culture를 선택하지만 원하는 문화를 사용할 수 있습니다.

십진수에 앞으로 2 개 또는 3 개의 선행 숫자가 포함 될지 알 수 없기 때문에 서식 지정 기능을 사용하는 것을 선호합니다.

편집 :를 사용 Truncate하여, 또는.

Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));


답변

사용하다:

public static class StringExtensions
{
    /// <summary>
    /// Cut End. "12".SubstringFromEnd(1) -> "1"
    /// </summary>
    public static string SubstringFromEnd(this string value, int startindex)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Substring(0, value.Length - startindex);
    }
}

두 가지 이유로 여기에서 확장 방법을 선호합니다.

  1. Substring으로 연결할 수 있습니다.
    Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
  2. 속도.


답변

LastIndexOf와 Substring을 결합하여 스팅 내에서 쉼표의 마지막 인덱스 왼쪽에있는 모든 문자를 가져올 수 있습니다.

string var = var.Substring (0, var.LastIndexOf ( ‘,’));


답변

사용할 수 있습니다 TrimEnd. 효율적이고 깨끗해 보입니다.

"Name,".TrimEnd(',');