80 votes

Meilleur moyen de convertir Pascal Case en une phrase

Quel est le meilleur moyen de convertir du Pascal Case (Camel Case supérieur) en une phrase.

Par exemple en commençant par

"AwaitingFeedback"

et en le convertissant en

"En attente de feedback"

C# de préférence mais je pourrais le convertir depuis Java ou similaire.

2 votes

Le camel case attendFeedback et non AwaitingFeedback (Pascal Case). De plus, ce que vous voulez faire n'est pas complètement possible. Que pensez-vous de désactiverGPS? Existe-t-il une solution suffisamment générale pour gérer ces cas?

0 votes

@kgiannakakis a modifié la question en conséquence. J'oublie toujours dans quel sens vont les noms, surtout avec les casse en Camel Case.

81voto

public static string ToSentenceCase(this string str)
{
    return Regex.Replace(str, "[a-z][A-Z]", m => m.Value[0] + " " + char.ToLower(m.Value[1]));
}

Dans les versions de visual studio après 2015, vous pouvez faire

public static string ToSentenceCase(this string str)
{
    return Regex.Replace(str, "[a-z][A-Z]", m => $"{m.Value[0]} {char.ToLower(m.Value[1])}");
}

Basé sur: Converting Pascal case to sentences using regular expression

22voto

Je préfère utiliser Humanizer pour cela. "Humanizer est une bibliothèque de classes portable qui répond à tous vos besoins .NET pour la manipulation et l'affichage de chaînes, énumérations, dates, heures, durées, nombres et quantités."

Réponse Courte

"AwaitingFeedback".Humanize() => Awaiting feedback

Réponse Longue et Descriptive

Humanizer peut faire beaucoup plus de travail. D'autres exemples sont :

"PascalCaseInputStringIsTurnedIntoSentence".Humanize() => "Pascal case input string is turned into sentence"
"Underscored_input_string_is_turned_into_sentence".Humanize() => "Underscored input string is turned into sentence"
"Can_return_title_Case".Humanize(LetterCasing.Title) => "Can Return Title Case"
"CanReturnLowerCase".Humanize(LetterCasing.LowerCase) => "can return lower case"

Le code complet est :

using Humanizer;
using static System.Console;

namespace HumanizerConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("AwaitingFeedback".Humanize());
            WriteLine("PascalCaseInputStringIsTurnedIntoSentence".Humanize());
            WriteLine("Underscored_input_string_is_turned_into_sentence".Humanize());
            WriteLine("Can_return_title_Case".Humanize(LetterCasing.Title));
            WriteLine("CanReturnLowerCase".Humanize(LetterCasing.LowerCase));
        }
    }
}

Sortie

Awaiting feedback
Pascal case input string is turned into sentence
Underscored input string is turned into sentence
Can Return Title Case
can return lower case

Si vous préférez écrire votre propre code C#, vous pouvez y parvenir en écrivant vous-même du code C# comme cela a déjà été répondu par d'autres.

16voto

Sandeep Datta Points 7344

Voici...

utiliser System;
utiliser System.Collections.Generic;
utiliser System.Linq;
utiliser System.Text;

espace de noms CamelCaseToString
{
    classe Program
    {
        statique vide Principal(string[] args)
        {
            Console.WriteLine(CamelCaseToString("ThisIsYourMasterCallingYou"));   
        }

        privée statique string CamelCaseToString(string str)
        {
            si (str == null || str.Length == 0)
                retourner null;

            StringBuilder retVal = new StringBuilder(32);

            retVal.Append(char.ToUpper(str[0]));
            pour (int i = 1; i < str.Length; i++ )
            {
                si (char.IsLower(str[i]))
                {
                    retVal.Append(str[i]);
                }
                autrement
                {
                    retVal.Append(" ");
                    retVal.Append(char.ToLower(str[i]));
                }
            }

            retourner retVal.ToString();
        }
    }
}

1 votes

Vous devriez utiliser ToUpper() sur le premier caractère, sinon votre routine ne fonctionne pas avec un vrai camelCase, seulement avec PascalCase

0 votes

Oui belle découverte, je savais qu'il y avait quelque chose de faux (mais je ne pouvais pas mettre le doigt dessus) quand il a dit que "AwaitingFeedback" est en camel case!

16voto

SSTA Points 111

Cela fonctionne pour moi:

Regex.Replace(strIn, "([A-Z]{1,2}|[0-9]+)", " $1").TrimStart()

6 votes

Comment cela change-t-il le cas de la lettre après l'espace?

1 votes

Cela peut ne pas retourner ce que vous avez l'intention pour des cas comme AwaitingTFeedback ou Awaiting9Feedback. La réponse de Jef est meilleure pour moi (qui retourne respectivement Awaiting T Feedback et Awaiting9 Feedback).

11voto

Lone Coder Points 2417

Ceci est comme @SSTA, mais est plus efficace que d'appeler TrimStart.

Regex.Replace("ThisIsMyCapsDelimitedString", "(\\B[A-Z])", " $1")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X