Format șir de caz din titlu

voturi
24

Cum pot format un șir de caractere la caz titlu ?

Întrebat 03/08/2008 la 17:03
sursa de către utilizator
În alte limbi...                            


18 răspunsuri

voturi
16

Aici este o metodă statică simplă de a face acest lucru în C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Publicat 03/08/2008 la 17:05
sursa de către utilizator

voturi
13

Mi-ar fi abtine de la upcasing automat toate precedat-spații albe cuvinte în scenarii în cazul în care mi-ar rula riscul de a atrage furia-au găsit unii.

Mi-ar lua în considerare cel puțin punerea în aplicare a unui dicționar pentru cazuri de excepție, cum ar fi articolele și conjuncții. Iată:

"Frumoasa si Bestia"

Iar când vine vorba de substantive proprii, lucru devine mult mai urât.

Publicat 03/08/2008 la 20:10
sursa de către utilizator

voturi
10

Iată o soluție Perl http://daringfireball.net/2008/05/title_case

Iată o soluție Ruby http://frankschmitt.org/projects/title-case

Iată o soluție one - liner Ruby: http://snippets.dzone.com/posts/show/4702

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

Ce-o căptușeala este de a face este folosind o expresie regulată de substituție a primului caracter al fiecărui cuvânt cu versiunea majuscule de ea.

Publicat 03/08/2008 la 19:22
sursa de către utilizator

voturi
8

Pentru a- l capatilise în, să zicem, C - utilizează codurile ascii ( http://www.asciitable.com/ ) pentru a găsi valoarea întreagă a carbonizate și scade 32 din ea.

Aceasta este o soluție slabă dacă aveți de gând vreodată să accepte caractere dincolo de az și AZ.

De exemplu: ASCII 134: å, ASCII 143: Â.
Utilizarea aritmetică devine: ASCII 102: f

Utilizați apelurile de bibliotecă, nu presupunem că puteți utiliza aritmetice cu numere întregi pe caractere pentru a obține înapoi ceva util. Unicode este dificil .

Publicat 04/08/2008 la 22:16
sursa de către utilizator

voturi
6

În Java, puteți folosi următorul cod.

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);
}
Publicat 02/03/2016 la 10:32
sursa de către utilizator

voturi
6

În Silverlight nu există nici ToTitleCaseîn TextInfoclasă.

Iată un mod simplu pe bază de regex.

Notă: Silverlight nu are regexes precompilate, dar pentru mine această pierdere de performanță nu este o 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();
        });
    }
Publicat 09/06/2010 la 05:24
sursa de către utilizator

voturi
5

În Perl:

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

Asta chiar și în Întrebări frecvente.

Publicat 29/09/2008 la 23:35
sursa de către utilizator

voturi
5

Dacă limba pe care îl utilizați are o metodă / funcție acceptată apoi utilizați doar că ( la fel ca în C # ToTitleCasemetoda)

Dacă nu, atunci veți dori să facă ceva de genul următoarele:

  1. Citiți în șirul
  2. Ia primul cuvânt
  3. Majusculă prima literă a acestui cuvânt 1
  4. Mergeți înainte și de a găsi cuvântul următor
  5. Du-te la 3, dacă nu la sfârșitul șirului, în caz contrar ieșire

1 Pentru a valorifica în, să zicem, C - utilizați codurile ascii pentru a găsi valoarea întreagă a carbonizate și scade 32 din ea.

Nu ar trebui să fie mult mai eroare de verificare în codul (asigurând litere valabile etc.), iar funcția „capitalizată“ va trebui să impună un fel de „sistem de titlu caz“ pe litere pentru a verifica pentru cuvinte care nu au nevoie care urmează să fie capatilised ( „și“, „dar“ , etc Aici este un bun sistem)

Publicat 03/08/2008 la 17:33
sursa de către utilizator

voturi
5

În ce limbă?

În PHP este:

ucwords ()

exemplu:

$HelloWorld = ucwords('hello world');
Publicat 03/08/2008 la 17:12
sursa de către utilizator

voturi
4

Excel-ca CORESPUNZĂTOR:

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;
}
Publicat 02/03/2011 la 23:29
sursa de către utilizator

voturi
2

http://titlecase.com/are un API

Publicat 09/06/2010 la 05:09
sursa de către utilizator

voturi
1

Aici este un simplu exemplu de cum se face:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Publicat 15/12/2017 la 11:54
sursa de către utilizator

voturi
1

Iată o implementare în Python: https://launchpad.net/titlecase.py

Și un port al acestei implementări pe care l - am făcut doar în C ++: http://codepad.org/RrfcsZzO

Publicat 19/11/2012 la 08:59
sursa de către utilizator

voturi
1

Există o formulă încorporată PROPER(n)în Excel.

A fost destul de încântați să vedem că nu a trebuit să-l scrie eu!

Publicat 09/06/2010 la 05:07
sursa de către utilizator

voturi
1

Cred că folosind CultureInfo nu este întotdeauna de încredere, acesta modul simplu și la îndemână pentru a manipula manual șir:

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;
Publicat 07/12/2009 la 17:56
sursa de către utilizator

voturi
-1

Aici aveți o versiune C ++. Are un set de cuvinte non uppercaseable ca prononuns și prepoziții. Cu toate acestea, nu aș recomanda automatizarea acestui proces, dacă sunteți de a face cu texte importante.

#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;
}
Publicat 30/09/2008 la 00:27
sursa de către utilizator

voturi
-1

Cu perl ai putea face acest lucru:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Publicat 16/09/2008 la 12:11
sursa de către utilizator

voturi
-1

Fără a utiliza o funcție de-a gata, un algoritm foarte simplu de nivel scăzut pentru a converti un șir de caractere la caz titlu:


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

Acest asssumes a „converti caractere în litere mari“ va face acest lucru în mod corect, indiferent dacă sunt sau nu caracterul este sensibil la caz (de exemplu, „+“).

Publicat 03/08/2008 la 17:25
sursa de către utilizator

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