Format String title Fall

stimmen
24

Wie formatiere ich einen String in Titel Fall ?

Veröffentlicht am 03/08/2008 um 17:03
quelle vom benutzer
In anderen Sprachen...                            


18 antworten

stimmen
16

Hier ist eine einfache statische Methode dies in C # zu tun:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Beantwortet am 03/08/2008 um 17:05
quelle vom benutzer

stimmen
13

Ich würde vorsichtig sein, automatisch alle durch Leerzeichen voran-Wörter in Szenarien upcasing, wo ich das Risiko einer anziehenden die Wut Nitpicker laufen würde.

Ich würde prüfen, mindestens ein Wörterbuch für Ausnahmefälle wie Artikel und Konjunktionen Umsetzung. Erblicken:

"Die Schöne und das Biest"

Und wenn es um Eigennamen kommt, wird die Sache viel hässlicher.

Beantwortet am 03/08/2008 um 20:10
quelle vom benutzer

stimmen
10

Hier ist eine Perl - Lösung http://daringfireball.net/2008/05/title_case

Hier ist eine Ruby - Lösung http://frankschmitt.org/projects/title-case

Hier ist eine Ruby - Einzeiler Lösung: http://snippets.dzone.com/posts/show/4702

'some string here'.gsub(/\b\w/){$&.upcase}

Was die Einzeiler tut, ist ein regulärer Ausdruck Substitution des ersten Buchstaben jedes Wortes mit der Groß Version davon verwenden.

Beantwortet am 03/08/2008 um 19:22
quelle vom benutzer

stimmen
8

Um capatilise es in, sagen wir, C - die ASCII - Codes verwenden ( http://www.asciitable.com/ ) den ganzzahligen Wert der Kohle zu finden und subtrahieren 32 von ihm.

Dies ist eine schlechte Lösung, wenn Sie jemals planen Zeichen über az und AZ zu akzeptieren.

Zum Beispiel: ASCII 134: A, ASCII 143: Å.
Mit Arithmetik bekommt man: ASCII 102: f

Verwenden Bibliothek Anrufe nicht davon ausgehen , Sie Integer - Arithmetik auf Ihrem Zeichen verwenden können , um wieder etwas Nützliches. Unicode ist heikel .

Beantwortet am 04/08/2008 um 22:16
quelle vom benutzer

stimmen
6

In Java können Sie den folgenden Code verwenden.

public String titleCase(String str) {
    char[] chars = str.toCharArray();
    for (int i = 0; i < chars.length; i++) {
        if (i == 0) {
            chars[i] = Character.toUpperCase(chars[i]);
        } else if ((i + 1) < chars.length && chars[i] == ' ') {
            chars[i + 1] = Character.toUpperCase(chars[i + 1]);
        }
    }
    return new String(chars);
}
Beantwortet am 02/03/2016 um 10:32
quelle vom benutzer

stimmen
6

In Silverlight gibt es keine ToTitleCasein der TextInfoKlasse.

Hier ist eine einfache regex basiert.

Hinweis: Silverlight nicht vorkompilierte reguläre Ausdrücke hat, aber für mich Performanceverlust ist kein Problem.

    public string TitleCase(string str)
    {
        return Regex.Replace(str, @"\w+", (m) =>
        {
            string tmp = m.Value;
            return char.ToUpper(tmp[0]) + tmp.Substring(1, tmp.Length - 1).ToLower();
        });
    }
Beantwortet am 09/06/2010 um 05:24
quelle vom benutzer

stimmen
5

In Perl:

$string =~ s/(\w+)/\u\L$1/g;

Das ist auch in der FAQ.

Beantwortet am 29/09/2008 um 23:35
quelle vom benutzer

stimmen
5

Wenn die Sprache , die Sie verwenden eine unterstützte Methode / Funktion hat dann verwenden nur , dass (wie in der C # ToTitleCaseMethode)

Wenn nicht, dann werden Sie so etwas wie die folgenden Funktionen ausführen:

  1. in der Zeichenfolge lesen
  2. Nehmen Sie das erste Wort
  3. Kapitalisieren den ersten Buchstaben des Wortes 1
  4. Gehe vorwärts und finden Sie das nächste Wort
  5. Zur 3, wenn nicht am Ende der Schnur, sonst Ausfahrt

1 kapitalisieren es in, sagen wir, C - verwenden , um die ASCII - Codes den ganzzahligen Wert der Kohle zu finden und subtrahieren 32 von ihm.

Es müßte viel mehr Fehler im Code überprüft werden (Gewährleistung gültige Buchstaben etc.), und die „kapitalisiert“ -Funktion benötigt eine Art „Titel-Fall scheme“ auf den Buchstaben zu verhängen für Worte zu überprüfen, die nicht brauchen capatilised ( ‚und‘, ‚aber‘ usw. werden hier ist ein gutes Schema)

Beantwortet am 03/08/2008 um 17:33
quelle vom benutzer

stimmen
5

In welcher Sprache?

In PHP ist es:

ucwords ()

Beispiel:

$HelloWorld = ucwords('hello world');
Beantwortet am 03/08/2008 um 17:12
quelle vom benutzer

stimmen
4

Excel-ähnliche Gemäße:

public static string ExcelProper(string s) {
    bool upper_needed = true;
    string result = "";
    foreach (char c in s) {
        bool is_letter = Char.IsLetter(c);
        if (is_letter)
            if (upper_needed)
                result += Char.ToUpper(c);
            else
                result += Char.ToLower(c);
        else
            result += c;
        upper_needed = !is_letter;
    }
    return result;
}
Beantwortet am 02/03/2011 um 23:29
quelle vom benutzer

stimmen
2

http://titlecase.com/hat eine API

Beantwortet am 09/06/2010 um 05:09
quelle vom benutzer

stimmen
1

Hier ist ein einfaches Beispiel dafür, wie es zu tun:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Beantwortet am 15/12/2017 um 11:54
quelle vom benutzer

stimmen
1

Hier ist eine Implementierung in Python: https://launchpad.net/titlecase.py

Und ein Anschluss dieser Implementierung , die ich gerade in C ++ gemacht habe: http://codepad.org/RrfcsZzO

Beantwortet am 19/11/2012 um 08:59
quelle vom benutzer

stimmen
1

Es gibt eine integrierte Formel PROPER(n)in Excel.

War ganz froh, dass ich zu sehen, hat es nicht selbst schreiben müssen!

Beantwortet am 09/06/2010 um 05:07
quelle vom benutzer

stimmen
1

Ich denke, die Culture verwenden, ist nicht immer zuverlässig, das ist das die einfache und praktische Art und Weise Zeichenfolge manuell zu manipulieren:

string sourceName = txtTextBox.Text.ToLower();
string destinationName = sourceName[0].ToUpper();

for (int i = 0; i < (sourceName.Length - 1); i++) {
  if (sourceName[i + 1] == "")  {
    destinationName += sourceName[i + 1];
  }
  else {
    destinationName += sourceName[i + 1];
  }
}
txtTextBox.Text = desinationName;
Beantwortet am 07/12/2009 um 17:56
quelle vom benutzer

stimmen
-1

Hier haben Sie eine C ++ Version. Es ist eine Reihe von nicht uppercaseable Wörter wie prononuns und Präpositionen bekam. Allerdings würde ich nicht empfehlen, diesen Prozess zu automatisieren, wenn Sie mit wichtigen Texten beschäftigen sind.

#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <set>

using namespace std;

typedef vector<pair<string, int> > subDivision;
set<string> nonUpperCaseAble;

subDivision split(string & cadena, string delim = " "){
    subDivision retorno;
    int pos, inic = 0;
    while((pos = cadena.find_first_of(delim, inic)) != cadena.npos){
        if(pos-inic > 0){
            retorno.push_back(make_pair(cadena.substr(inic, pos-inic), inic));
        }
        inic = pos+1;
    }
    if(inic != cadena.length()){
        retorno.push_back(make_pair(cadena.substr(inic, cadena.length() - inic), inic));
    }
    return retorno;
}

string firstUpper (string & pal){
    pal[0] = toupper(pal[0]);
    return pal;
}

int main()
{
    nonUpperCaseAble.insert("the");
    nonUpperCaseAble.insert("of");
    nonUpperCaseAble.insert("in");
    // ...

    string linea, resultado;
    cout << "Type the line you want to convert: " << endl;
    getline(cin, linea);

    subDivision trozos = split(linea);
    for(int i = 0; i < trozos.size(); i++){
        if(trozos[i].second == 0)
        {
            resultado += firstUpper(trozos[i].first);
        }
        else if (linea[trozos[i].second-1] == ' ')
        {
            if(nonUpperCaseAble.find(trozos[i].first) == nonUpperCaseAble.end())
            {
                resultado += " " + firstUpper(trozos[i].first);
            }else{
                resultado += " " + trozos[i].first;
            }
        }
        else
        {
            resultado += trozos[i].first;
        }       
    }

    cout << resultado << endl;
    getchar();
    return 0;
}
Beantwortet am 30/09/2008 um 00:27
quelle vom benutzer

stimmen
-1

Mit Perl können Sie dies tun:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Beantwortet am 16/09/2008 um 12:11
quelle vom benutzer

stimmen
-1

Ohne Verwendung eine vorgefertigte Funktion, ein super-einfacher Low-Level-Algorithmus, um einen String in Titel Fall zu konvertieren:


convert first character to uppercase.
for each character in string,
    if the previous character is whitespace,
        convert character to uppercase.

Dies asssumes die „convert Zeichen in Großbuchstaben“ wird das tun richtig, unabhängig davon, ob das Zeichen Groß- und Kleinschreibung (zB ‚+‘).

Beantwortet am 03/08/2008 um 17:25
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more