문자열의 첫 문자를 소문자로 변환하는 방법을 원합니다.
내 접근 방식 :
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
당신의 접근 방식은 무엇입니까?
답변
간단한 연결을 사용합니다.
Char.ToLowerInvariant(name[0]) + name.Substring(1)
첫 번째 솔루션은 string.Format
속도가 느리기 때문에 최적화 되지 않았으며 절대로 변경되지 않는 형식이 있으면 필요하지 않습니다. 또한 문자를 소문자로 은닉하기 위해 추가 문자열을 생성하므로 필요하지 않습니다.
“+ 32″를 사용하는 방법은 ASCII 문자 값 오프셋에 대한 지식이 필요하기 때문에 추악하고 유지 관리 할 수 없습니다. 또한 유니 코드 데이터 및 ASCII 기호 문자로 잘못된 출력을 생성합니다.
답변
상황에 따라 약간의 방어 프로그래밍이 바람직 할 수 있습니다.
public static string FirstCharacterToLower(string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
또한이 if
명령문은 새 문자열이 변경되지 않을 경우 빌드되지 않도록합니다. 대신 null 입력에서 메소드가 실패하도록하고을 던질 수 ArgumentNullException
있습니다.
사람들이 언급했듯이 String.Format
이것을 사용 하는 것은 과잉입니다.
답변
이 답변을 우연히 발견하는 사람에게 도움이되는 경우를 대비하여.
나는 이것이 확장 방법으로 가장 좋을 것이라고 생각한 다음 yourString.FirstCharacterToLower ();
public static class StringExtensions
{
public static string FirstCharacterToLower(this string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
{
return str;
}
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
}
답변
광산은
if (!string.IsNullOrEmpty (val) && val.Length > 0)
{
return val[0].ToString().ToLowerInvariant() + val.Remove (0,1);
}
답변
나는 대답을 좋아하지만 검사 외에 약어를 다루는 경우 string.IsNullOrEmpty
도 확인합니다 Char.IsLower(name[1])
. 예를 들어 “AIDS”가 “aIDS”가되는 것을 원하지 않을 것입니다.
답변
C #을 남용하지 않고 내가 알고있는 가장 빠른 솔루션 :
public static string LowerCaseFirstLetter(string value)
{
if (value?.Length > 0)
{
var letters = value.ToCharArray();
letters[0] = char.ToLowerInvariant(letters[0]);
return new string(letters);
}
return value;
}
답변
몇 가지를 결합하여 연결 가능한 확장으로 만들었습니다. 공백 및 문자 이외의 단락이 추가되었습니다.
public static string FirstLower(this string input) =>
(!string.IsNullOrWhiteSpace(input) && input.Length > 0
&& char.IsLetter(input[0]) && !char.IsLower(input[0]))
? input[0].ToString().ToLowerInvariant() + input.Remove(0, 1) : input;