language agnostic - Formatieren Sie die Zeichenfolge in Groß- und Kleinschreibung

Translate

Wie formatiere ich einen String?Titelfall?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

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

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Quelle
Translate

Ich wäre vorsichtig, wenn ich in Szenarien, in denen ich das Risiko eingehen würde, die Wut von Nitpickern auf mich zu ziehen, automatisch alle Wörter mit Leerzeichen vorangestellt hätte.

Ich würde zumindest in Betracht ziehen, ein Wörterbuch für Ausnahmefälle wie Artikel und Konjunktionen zu implementieren. Erblicken:

"Die Schöne und das Biest"

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

Quelle
Translate

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

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

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

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

Was der Einzeiler tut, ist die Ersetzung des ersten Zeichens jedes Wortes durch einen regulären Ausdruck durch die Großbuchstabenversion.

Quelle
Translate

Um es beispielsweise in C zu kapatilisieren, verwenden Sie die ASCII-Codes (http://www.asciitable.com/), um den ganzzahligen Wert des Zeichens zu finden und 32 davon zu subtrahieren.

Dies ist eine schlechte Lösung, wenn Sie jemals vorhaben, Zeichen jenseits von az und AZ zu akzeptieren.

Zum Beispiel: ASCII 134: å, ASCII 143: Å.
Mit der Arithmetik erhalten Sie: ASCII 102: f

Verwenden Sie Bibliotheksaufrufe. Gehen Sie nicht davon aus, dass Sie für Ihre Zeichen eine Ganzzahlarithmetik verwenden können, um etwas Nützliches zurückzugewinnen. Unicode istschwierig.

Quelle
Translate

In Silverlight gibt es keineToTitleCasein demTextInfoKlasse.

Hier ist eine einfache, auf Regex basierende Methode.

Hinweis: Silverlight hat keine vorkompilierten regulären Ausdrücke, aber für mich ist dieser Leistungsverlust 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();
        });
    }
Quelle
Translate

In Perl:

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

Das steht sogar in den FAQ.

Quelle
Translate

Wenn die von Ihnen verwendete Sprache eine unterstützte Methode / Funktion hat, verwenden Sie diese einfach (wie in C #)ToTitleCaseMethode)

Wenn dies nicht der Fall ist, möchten Sie Folgendes tun:

  1. Lesen Sie die Zeichenfolge ein
  2. Nimm das erste Wort
  3. Großschreiben Sie den ersten Buchstaben dieses Wortes1
  4. Gehe geradeaus und finde das nächste Wort
  5. Gehen Sie zu 3, wenn nicht am Ende der Zeichenfolge, andernfalls beenden Sie

1Um es beispielsweise in C groß zu schreiben, verwenden Sie dieASCII-Codesum den ganzzahligen Wert des Zeichens zu finden und 32 davon zu subtrahieren.

Es müsste viel mehr Fehler im Code geben (um gültige Buchstaben usw. sicherzustellen), und die Funktion "Großschreibung" muss den Buchstaben eine Art "Titel-Fall-Schema" auferlegen, um nach Wörtern zu suchen, die nicht benötigt werden kapatilisiert werden ('und', 'aber' usw.Hierist ein gutes Schema)

Quelle
Translate

In welcher Sprache?

In PHP ist es:

ucwords ()

Beispiel:

$HelloWorld = ucwords('hello world');
Quelle
Translate

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);
}
Quelle
Translate

Excel-ähnliches RICHTIG:

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;
}
Quelle
Translate

/out/aHR0cDovL3RpdGxlY2FzZS5jb20=/hat eineAPI

Quelle
Translate

Es gibt eine eingebaute FormelPROPER(n)in Excel.

War sehr erfreut zu sehen, dass ich es nicht selbst schreiben musste!

Quelle
Translate

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

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

Quelle
Translate

Ich denke, die Verwendung von CultureInfo ist nicht immer zuverlässig. Dies ist die einfache und praktische Möglichkeit, Zeichenfolgen manuell zu bearbeiten:

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;
Quelle
Translate

Hier ist ein einfaches Beispiel dafür:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Quelle
Translate

Ohne Verwendung einer vorgefertigten Funktion ein supereinfacher Low-Level-Algorithmus zum Konvertieren einer Zeichenfolge in eine Groß- und Kleinschreibung:


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

Dies setzt voraus, dass das "Zeichen in Großbuchstaben konvertieren" dies korrekt ausführt, unabhängig davon, ob das Zeichen zwischen Groß- und Kleinschreibung unterscheidet oder nicht (z. B. '+').

Quelle
Translate

Hier haben Sie eine C ++ - Version. Es enthält eine Reihe von nicht hochschreibbaren Wörtern wie Prononuns und Präpositionen. Ich würde jedoch nicht empfehlen, diesen Prozess zu automatisieren, wenn Sie sich mit wichtigen Texten befassen möchten.

#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;
}
Quelle
Rose Lee
Translate

Mit Perl können Sie dies tun:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Quelle