93

それを行うために独自のアルゴリズムを作成することもできますが、C#でのrubyのヒューマナイズに相当するものがあるはずだと思います。

私はそれをグーグルで検索しましたが、日付を人間化する方法しか見つかりませんでした。

例:

  • 「Loremlipsumet」を「Loremlipsumet」に変える方法
  • 「Loremlipsumet」を「Loremlipsumet」に変える方法
4

9 に答える 9

152

@miguelの回答のコメントで説明されているように、 .NET1.1以降で使用可能になっているものを使用TextInfo.ToTitleCaseできます。これがあなたの例に対応するいくつかのコードです:

string lipsum1 = "Lorem lipsum et";

// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;

// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}", 
                  lipsum1, 
                  textInfo.ToTitleCase( lipsum1 )); 

// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et

頭字語がテキストに含まれている場合は、「IEEE」(米国電気電子学会)が「ieee」または「 Ieee」。

ただし、最初の文字だけを大文字にしたい場合は、ここにある解決策を実行できます…または、文字列を分割してリストの最初の文字を大文字にすることもできます。

string lipsum2 = "Lorem Lipsum Et";

string lipsum2lower = textInfo.ToLower(lipsum2);

string[] lipsum2split = lipsum2lower.Split(' ');

bool first = true;

foreach (string s in lipsum2split)
{
    if (first)
    {
        Console.Write("{0} ", textInfo.ToTitleCase(s));
        first = false;
    }
    else
    {
        Console.Write("{0} ", s);
    }
}

// Will output: Lorem lipsum et 
于 2009-05-27T07:08:56.777 に答える
41

別のエレガントな解決策があります:

ToTitleCaseプロジェクトの静的クラスで関数を定義します

using System.Globalization;

public static string ToTitleCase(this string title)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title.ToLower()); 
}

そして、プロジェクトのどこでも文字列拡張子のように使用します。

"have a good day !".ToTitleCase() // "Have A Good Day !"
于 2017-07-11T12:27:17.073 に答える
39

これには正規表現を使用してください。

string s = "the quick brown fox jumps over the lazy dog";
s = Regex.Replace(s, @"(^\w)|(\s\w)", m => m.Value.ToUpper());
于 2015-04-02T02:11:50.587 に答える
2

最初の文字を大文字にしたい場合は、これを独自のユーティリティメソッドに貼り付けてください。

return string.IsNullOrEmpty(str) 
    ? str
    : str[0].ToUpperInvariant() + str.Substring(1).ToLowerInvariant();

すべての単語の最初の文字を大文字にするライブラリメソッドもあります。

http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx

于 2009-05-26T22:34:18.133 に答える
2

すべての例では、他のキャラクターが最初に低くなっているようですが、これは私が必要としていたものではありません。

customerName= CustomerName<-これが私が欲しかったものです

this is an example=This Is An Example

public static string ToUpperEveryWord(this string s)
{
    // Check for empty string.  
    if (string.IsNullOrEmpty(s))
    {
        return string.Empty;
    }

    var words = s.Split(' ');

    var t = "";
    foreach (var word in words)
    {
        t += char.ToUpper(word[0]) + word.Substring(1) + ' ';
    }
    return t.Trim();
}
于 2019-03-22T16:20:13.560 に答える
1

CSS手法は問題ありませんが、ブラウザでの文字列の表示を変更するだけです。より良い方法は、ブラウザに送信する前にテキスト自体を大文字にすることです。

上記の含意のほとんどは問題ありませんが、保存する必要のある大文字小文字の混合単語がある場合、または真のタイトル大文字小文字を使用する場合にどうなるかという問題に対処するものはありません。たとえば、次のようになります。

「米国で博士課程を学ぶ場所」

また

「IRSフォームUB40a」

また、CultureInfo.CurrentCulture.TextInfo.ToTitleCase(string)を使用すると、「Sports andMLBbaseball」のように大文字が保持されて「SportsandMLBBaseball」になりますが、文字列全体を大文字にすると問題が発生します。

そこで、大文字と大文字と小文字を組み合わせた単語を保持し、特殊なCasesとlowerCasesの文字列配列に含めることで、小さな単語を小文字にする(フレーズの最初と最後にない場合)ことができる簡単な関数をまとめました。

public static string TitleCase(string value) {
        string titleString = ""; // destination string, this will be returned by function
        if (!String.IsNullOrEmpty(value)) {
            string[] lowerCases = new string[12] { "of", "the", "in", "a", "an", "to", "and", "at", "from", "by", "on", "or"}; // list of lower case words that should only be capitalised at start and end of title
            string[] specialCases = new string[7] { "UK", "USA", "IRS", "UCLA", "PHd", "UB40a", "MSc" }; // list of words that need capitalisation preserved at any point in title
            string[] words = value.ToLower().Split(' ');
            bool wordAdded = false; // flag to confirm whether this word appears in special case list
            int counter = 1;
            foreach (string s in words) {

                // check if word appears in lower case list
                foreach (string lcWord in lowerCases) {
                    if (s.ToLower() == lcWord) {
                        // if lower case word is the first or last word of the title then it still needs capital so skip this bit.
                        if (counter == 0 || counter == words.Length) { break; };
                        titleString += lcWord;
                        wordAdded = true;
                        break;
                    }
                }

                // check if word appears in special case list
                foreach (string scWord in specialCases) {
                    if (s.ToUpper() == scWord.ToUpper()) {
                        titleString += scWord;
                        wordAdded = true;
                        break;
                    }
                }

                if (!wordAdded) { // word does not appear in special cases or lower cases, so capitalise first letter and add to destination string
                    titleString += char.ToUpper(s[0]) + s.Substring(1).ToLower();
                }
                wordAdded = false;

                if (counter < words.Length) {
                    titleString += " "; //dont forget to add spaces back in again!
                }
                counter++;
            }
        }
        return titleString;
    }

これは、すばやく簡単な方法です。もっと時間をかけたい場合は、おそらく少し改善することができます。

「a」や「of」などの小さな単語の大文字化を維持したい場合は、特殊なケースの文字列配列からそれらを削除してください。組織が異なれば、資本化に関する規則も異なります。

このサイトでこのコードの動作例を見ることができます:Egg Donation London-このサイトは、「/ services / uk-egg-bank / Introduction」などのURLを解析することにより、ページの上部にパンくずリストを自動的に作成します。トレイルのフォルダー名は、ハイフンがスペースに置き換えられ、フォルダー名が大文字になっているため、uk-egg-bankはUKEggBankになります。(大文字の「UK」を保持)

このコードの拡張は、頭字語と大文字/小文字の単語のルックアップテーブルを共有テキストファイル、データベーステーブル、またはWebサービスに含めることで、大文字と小文字が混在する単語のリストを1つの場所から維持し、さまざまな異なる単語に適用できるようにすることができます。機能に依存するアプリケーション。

于 2014-10-24T10:27:33.090 に答える
0

.NETには、適切な言語キャピタリゼーションのための事前に構築されたソリューションはありません。どんな資本化を目指していますか?シカゴマニュアルオブスタイルの慣習に従っていますか?AMAまたはMLA?平易な英語の文の大文字化でさえ、単語に対して何千もの特別な例外があります。ルビーのヒューマナイズが何をするのかを話すことはできませんが、それはおそらくキャピタライゼーションの言語規則に従わず、代わりにもっと単純なことをしていると思います。

内部的には、これと同じ問題が発生し、文の大文字化さえ考慮せずに、記事タイトルの適切な(私たちの小さな世界では)ケーシングを処理するためだけにかなり大量のコードを書かなければなりませんでした。そしてそれは確かに「あいまい」になります:)

それは本当にあなたが必要とするものに依存します-なぜあなたは文を適切な大文字に変換しようとしているのですか(そしてどのような文脈で)?

于 2009-05-26T22:48:57.090 に答える
0

カスタム拡張メソッドを使用して同じことを達成しました。First Letter of Firstサブ文字列には、メソッドを使用しますyourString.ToFirstLetterUpper()記事と一部の命題を除くすべてのサブ文字列の最初の文字には、メソッドを使用しますyourString.ToAllFirstLetterInUpper()。以下はコンソールプログラムです。

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("this is my string".ToAllFirstLetterInUpper());
            Console.WriteLine("uniVersity of lonDon".ToAllFirstLetterInUpper());
        }
    }

    public static class StringExtension
    {
        public static string ToAllFirstLetterInUpper(this string str)
        {
            var array = str.Split(" ");

            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] == "" || array[i] == " " || listOfArticles_Prepositions().Contains(array[i])) continue;
                array[i] = array[i].ToFirstLetterUpper();
            }
            return string.Join(" ", array);
        }

        private static string ToFirstLetterUpper(this string str)
        {
            return str?.First().ToString().ToUpper() + str?.Substring(1).ToLower();
        }

        private static string[] listOfArticles_Prepositions()
        {
            return new[]
            {
                "in","on","to","of","and","or","for","a","an","is"
            };
        }
    }

出力

This is My String
University of London
Process finished with exit code 0.
于 2020-01-26T07:26:22.217 に答える
-1

私の知る限り、コードを書かない(またはクリブする)ことなしにそれを行う方法はありません。C#ネット(ha!)あなたの上部、下部、およびタイトル(あなたが持っているもの)の場合:

http://support.microsoft.com/kb/312890/EN-US/

于 2009-05-26T22:34:57.150 に答える