Chaîne de format à l'autre titre

voix
24

Comment formater une chaîne à la casse du titre ?

Créé 03/08/2008 à 17:03
source utilisateur
Dans d'autres langues...                            


18 réponses

voix
16

Voici une méthode simple statique pour faire en C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Créé 03/08/2008 à 17:05
source utilisateur

voix
13

Je me méfie de upcasing automatiquement tous les espaces ont précédé les mots dans les scénarios où je courrais le risque d'attirer la fureur de tatillons.

Je au moins envisager d'appliquer un dictionnaire pour les cas d'exception comme des articles et conjonctions. Voir:

"La belle et la Bête"

Et quand il s'agit de noms propres, la chose devient beaucoup plus laid.

Créé 03/08/2008 à 20:10
source utilisateur

voix
10

Voici une solution Perl http://daringfireball.net/2008/05/title_case

Voici une solution Ruby http://frankschmitt.org/projects/title-case

Voici une solution Ruby one-liner: http://snippets.dzone.com/posts/show/4702

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

Ce que le one-liner fait avec une substitution d'expression régulière du premier caractère de chaque mot avec la version en majuscules de celui-ci.

Créé 03/08/2008 à 19:22
source utilisateur

voix
8

Pour capatilise dans, disons, C - utiliser les codes ascii ( http://www.asciitable.com/ ) pour trouver la valeur entière de l'omble chevalier et soustraire 32 de celui - ci.

Ceci est une mauvaise solution si vous prévoyez toujours d'accepter les caractères au-delà de az et AZ.

Par exemple: ASCII 134: å, ASCII 143: Å.
En utilisant l' arithmétique vous obtient: ASCII 102: f

Utilisez les appels bibliothèque, ne présumez pas que vous pouvez utiliser l' arithmétique entier sur vos personnages pour récupérer quelque chose d' utile. Unicode est délicate .

Créé 04/08/2008 à 22:16
source utilisateur

voix
6

En Java, vous pouvez utiliser le code suivant.

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);
}
Créé 02/03/2016 à 10:32
source utilisateur

voix
6

Dans Silverlight il n'y a pas ToTitleCasedans la TextInfoclasse.

Voici un moyen simple basé regex.

Remarque: Silverlight n'a pas précompilés regexes, mais pour moi cette perte de performance n'est pas un problème.

    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();
        });
    }
Créé 09/06/2010 à 05:24
source utilisateur

voix
5

En Perl:

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

C'est même dans la FAQ.

Créé 29/09/2008 à 23:35
source utilisateur

voix
5

Si la langue que vous utilisez a une méthode / fonction prise en charge alors utilisez simplement que (comme dans le C # ToTitleCaseméthode)

Si elle ne le fait pas, alors vous aurez envie de faire quelque chose comme ce qui suit:

  1. Lire dans la chaîne
  2. Prenez le premier mot
  3. Capitaliser la première lettre de ce mot 1
  4. Aller de l'avant et trouver le mot suivant
  5. Aller à 3 sinon à la fin de la chaîne, sinon la sortie

1 Pour tirer parti dans, disons, C - utiliser les codes ascii pour trouver la valeur entière de l'omble chevalier et soustraire 32 de celui - ci.

Il faudrait beaucoup plus de contrôle d' erreur dans le code (lettres assurant valides etc.), et la fonction « Capitaliser » devra imposer une sorte de « système titre-cas » sur les lettres pour vérifier les mots qui ne ont pas besoin à capatilised ( « et », « mais » , etc. Voici un bon plan)

Créé 03/08/2008 à 17:33
source utilisateur

voix
5

Dans quelle langue?

En PHP, il est:

ucwords ()

Exemple:

$HelloWorld = ucwords('hello world');
Créé 03/08/2008 à 17:12
source utilisateur

voix
4

Excel comme CORRECTE:

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;
}
Créé 02/03/2011 à 23:29
source utilisateur

voix
2

http://titlecase.com/a une API

Créé 09/06/2010 à 05:09
source utilisateur

voix
1

Voici un exemple simple de la façon de le faire:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Créé 15/12/2017 à 11:54
source utilisateur

voix
1

Voici une implémentation en Python: https://launchpad.net/titlecase.py

Et un port de cette mise en œuvre que je viens de faire en C ++: http://codepad.org/RrfcsZzO

Créé 19/11/2012 à 08:59
source utilisateur

voix
1

Il existe une formule intégrée PROPER(n)dans Excel.

Était très heureux de voir que je ne devais pas l'écrire moi-même!

Créé 09/06/2010 à 05:07
source utilisateur

voix
1

Je pense que l'utilisation du CultureInfo est pas toujours fiable, ce le moyen simple et pratique pour manipuler manuellement la chaîne:

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;
Créé 07/12/2009 à 17:56
source utilisateur

voix
-1

Ici vous avez une version C ++. Il a un ensemble de mots non uppercaseable comme prononuns et prépositions. Cependant, je ne recommanderais pas l'automatisation de ce processus si vous devez traiter des textes importants.

#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;
}
Créé 30/09/2008 à 00:27
source utilisateur

voix
-1

Avec Perl, vous pouvez le faire:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Créé 16/09/2008 à 12:11
source utilisateur

voix
-1

Sans l'aide d'une fonction prête à l'emploi, un algorithme bas niveau super-simple de convertir une chaîne en titre:


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

Ce asssumes le « convertir caractère en majuscules » va faire correctement quel que soit le caractère est sensible à la casse ou non (par exemple, « + »).

Créé 03/08/2008 à 17:25
source utilisateur

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