Format string om de titel case

stemmen
24

Hoe kan ik een string te formatteren titel geval ?

De vraag is gesteld op 03/08/2008 om 17:03
bron van user
In andere talen...                            


18 antwoorden

stemmen
16

Hier is een eenvoudige statische methode om dit te doen in C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
antwoordde op 03/08/2008 om 17:05
bron van user

stemmen
13

Ik zou hun hoede van alle witruimte voorafgegaan-woorden automatisch upcasing in scenario's waar ik de kans op het aantrekken van de woede van nitpickers zou draaien.

Ik zou in ieder geval overwegen om een ​​woordenboek voor uitzonderingsgevallen, zoals artikelen en voegwoorden. behold:

"Schoonheid en het beest"

En als het gaat om eigennamen, het ding krijgt veel lelijker.

antwoordde op 03/08/2008 om 20:10
bron van user

stemmen
10

Hier is een Perl oplossing http://daringfireball.net/2008/05/title_case

Hier is een Ruby oplossing http://frankschmitt.org/projects/title-case

Hier is een Ruby one-liner oplossing: http://snippets.dzone.com/posts/show/4702

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

Wat de one-liner aan het doen is met behulp van een reguliere expressie vervanging van het eerste teken van elk woord met de hoofdletter versie van het.

antwoordde op 03/08/2008 om 19:22
bron van user

stemmen
8

Het capatilise in, zeg, C - Gebruik de ASCII codes ( http://www.asciitable.com/ ) het gehele getal van het residu vinden en aftrekken 32 van.

Dit is een slechte oplossing als je ooit van plan bent om personages dan az en AZ accepteren.

Bijvoorbeeld: ASCII 134 Å, ASCII 143: Å.
Met behulp van rekenkundige krijgt u: ASCII 102: f

Gebruik bibliotheek oproepen, ga er niet vanuit kunt u gehele getallen te gebruiken op je personages terug te krijgen iets nuttigs. Unicode is lastig .

antwoordde op 04/08/2008 om 22:16
bron van user

stemmen
6

In Java, kunt u de volgende code gebruiken.

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);
}
antwoordde op 02/03/2016 om 10:32
bron van user

stemmen
6

In Silverlight is er geen ToTitleCasein de TextInfoklas.

Hier is een eenvoudige reguliere expressies op basis manier.

Opmerking: Silverlight niet gecompileerde reguliere expressies, maar voor mij is dit prestatieverlies is geen probleem.

    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();
        });
    }
antwoordde op 09/06/2010 om 05:24
bron van user

stemmen
5

In Perl:

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

Dat is zelfs in de FAQ.

antwoordde op 29/09/2008 om 23:35
bron van user

stemmen
5

Als de taal die u gebruikt heeft een ondersteunde methode / functie dan gewoon gebruiken (zoals in de C # ToTitleCasemethode)

Als dit niet gebeurt, dan wil je iets als het volgende doen:

  1. Lees in de string
  2. Neem het eerste woord
  3. De eerste letter van dat woord 1
  4. Ga vooruit en vind het volgende woord
  5. Ga naar 3 indien niet aan het einde van de string, anders exit

1 Om te profiteren in bijvoorbeeld C - Gebruik de ASCII codes voor de gehele waarde van de kool te vinden en aftrekken 32 van.

Er zou moeten veel meer foutcontrole in de code (zorgen geldig letters etc.), en de functie "hoofdletter" zal moeten een soort van "title-case-regeling" op de brieven op te leggen om te controleren of woorden die het niet nodig te capatilised ( 'en', 'maar' etc. Hier is een goede regeling)

antwoordde op 03/08/2008 om 17:33
bron van user

stemmen
5

In welke taal?

In PHP is het:

ucwords ()

voorbeeld:

$HelloWorld = ucwords('hello world');
antwoordde op 03/08/2008 om 17:12
bron van user

stemmen
4

Excel-achtige PROPER:

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;
}
antwoordde op 02/03/2011 om 23:29
bron van user

stemmen
2

http://titlecase.com/heeft een API

antwoordde op 09/06/2010 om 05:09
bron van user

stemmen
1

Hier is een eenvoudig voorbeeld van hoe dit te doen:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
antwoordde op 15/12/2017 om 11:54
bron van user

stemmen
1

Hier is een implementatie in Python: https://launchpad.net/titlecase.py

En een haven van deze implementatie dat ik net heb gedaan in C ++: http://codepad.org/RrfcsZzO

antwoordde op 19/11/2012 om 08:59
bron van user

stemmen
1

Er is een ingebouwde formule PROPER(n)in Excel.

Was heel blij om te zien dat ik niet hoeft op te schrijven zelf!

antwoordde op 09/06/2010 om 05:07
bron van user

stemmen
1

Ik denk dat het gebruik van de CultureInfo is niet altijd betrouwbaar, is dit de de eenvoudige en handige manier om achter de hand te manipuleren:

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;
antwoordde op 07/12/2009 om 17:56
bron van user

stemmen
-1

Hier heb je een C ++ versie. Het heeft een reeks niet uppercaseable woorden als prononuns en voorzetsels. Toch zou ik niet aanraden het automatiseren van dit proces als u bent om te gaan met belangrijke teksten.

#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;
}
antwoordde op 30/09/2008 om 00:27
bron van user

stemmen
-1

Met perl je dit kon doen:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
antwoordde op 16/09/2008 om 12:11
bron van user

stemmen
-1

Zonder gebruik van een kant-en-klare-functie, een super-eenvoudige low-level algoritme om een ​​string om de titel case te zetten:


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

Dit asssumes de "convert karakter naar hoofdletters" doet dat juist ongeacht of niet het karakter is hoofdlettergevoelig (bijvoorbeeld '+').

antwoordde op 03/08/2008 om 17:25
bron van user

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