0

가능한 중복 :
Does anyone have a good Proper Case algorithm이름의 자동 대소 문자를 처리하는 방법 (처음, 마지막)?

나는 다양한에서 배치 프로세스의 일부로로드 된 사용자의 이름을 표시하는 날 요구 사항 추력을 가진 불행한 위치에 현재이다 소스 (엑셀, 엑세스, 등등 ...)를 올바른 문자 케이싱으로 바꾸십시오.

예를 들어, 이름이 "존 DOE"로로드 된 경우 "John Doe"로 표시되어야합니다.

분명히 이것은 매우 ... 등 맥도날드, 오라일리, 르브론, 같은 이름을 가진 매우 빠르게 복잡해진다

이 연구 할 때, 내가 찾을 수있는 유일한 방법은 모두 대문자로 이름을 표시하는 말을 조언했다 McDonald, O'reilly 및 Lebron과 같은 이름을 표시하는 것보다이 솔루션이 더 선호되는 반면에 "나는 이것이 가질 수있는 전부입니다."라고 대답하면서 다시 실전에 옮겼습니다.

수용 할 수있는 라이브러리가 있습니까 (오픈 소스 또는 유료)? 나는 그것이 가장 완벽 할 수는 없다는 것을 깨닫습니다. 그러나 95-99 %의 케이스를 커버 할 수 있다면, 그렇게해야합니다.

미리 감사드립니다.

+0

비록 맥도널드/르브론 시나리오를 처리하지 못할 수도 있습니다 ... – Jason

+1

예외적 인 이름의 사전 없이는 맥도날드/르브론 시나리오를 처리 할 수 ​​없습니다. – jball

답변

1

정확히 Perl의 NameCase 모듈을 확인할 수 있습니다.

+0

고마워, 내가 뭘 찾고 있었는지. 분명히 모든 시나리오를 다룰 수는 없지만 가능한 모든 방법을 확신 할 수는 없습니다. 최소한 대부분의 상황이 다루어 질 것입니다. –

1

당신은 세계화 네임 스페이스의 타이틀 케이스를 사용할 수 있습니다

 
    string myName = "JOHN QUINCY PUBLIC"; 
    System.Globalization.CultureInfo cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture; 
    System.Globalization.TextInfo textInfo = cultureInfo.TextInfo; 
    string convertedName = textInfo.ToTitleCase(myName.ToLower()); 
    Console.WriteLine(convertedName); 

그것은 아포스트로피 당신이 원하는 방식으로 처리하지 않습니다 "존 퀸시 공개"

를 생성합니다.

+0

MSDN 기사의 주석을 보면 모든 대문자로로드되는 텍스트를 처리하지 못해 안타깝게도 내 시나리오에서는 유용하지 않습니다. http://msdn.microsoft.com/en-us/ library/system.globalization.textinfo.totitlecase.aspx –

+0

아마도 내가 따르지 않고 있지만 위의 코드는 "John Doe"를 "John Doe"(예제)로 변경합니다. 모든 대문자 단어를 무시하는 ToTitleCase의 기이는 ToLower() 호출의 이유입니다. – Jon

+0

오, 내 잘못, 나는 거기에 끼어 든 "ToLower()"를 보지 못했습니다. –