Format string do tytułu wypadku

głosy
24

Jak mogę sformatować ciąg tytułu wypadku ?

Utwórz 03/08/2008 o 17:03
źródło użytkownik
W innych językach...                            


18 odpowiedzi

głosy
16

Oto prosta metoda statyczna to zrobić w C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Odpowiedział 03/08/2008 o 17:05
źródło użytkownik

głosy
13

Byłbym ostrożny automatycznie upcasing wszystkie poprzedzony białymi znakami Słowa w scenariuszach, w których chciałbym uruchomić ryzyko przyciągnięcia furię nitpickers.

Chciałbym przynajmniej rozważyć wdrożenie słownika wyjątków w przypadkach takich artykułów i koniunkcji. Ujrzeć:

"Piękna i Bestia"

A jeśli chodzi o rzeczowniki, rzecz staje się o wiele brzydsze.

Odpowiedział 03/08/2008 o 20:10
źródło użytkownik

głosy
10

Oto rozwiązanie Perl http://daringfireball.net/2008/05/title_case

Oto rozwiązanie Ruby http://frankschmitt.org/projects/title-case

Oto jedno rozwiązanie-liner Ruby: http://snippets.dzone.com/posts/show/4702

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

Co do jednego-liner robi to przy użyciu zwykłej zmiany ekspresji pierwszego znaku każdego wyrazu z wielkiej wersję.

Odpowiedział 03/08/2008 o 19:22
źródło użytkownik

głosy
8

Aby capatilise je w, na przykład, C - wykorzystanie kodów ASCII ( http://www.asciitable.com/ ) w celu uzyskania wartości liczby całkowitej karbonizatu i odjąć 32 od niego.

Jest to słabe rozwiązanie, jeśli kiedykolwiek zamierzasz przyjąć znaków poza AZ i AZ.

Na przykład: ASCII, 134 A, 143: A ASCII.
Korzystanie z arytmetyki dostaje: ASCII 102: f

Użyj połączenia bibliotecznych, nie ponoszą można użyć arytmetyki liczb całkowitych na swoich bohaterów, aby wrócić coś pożytecznego. Unicode jest trudne .

Odpowiedział 04/08/2008 o 22:16
źródło użytkownik

głosy
6

W języku Java, można użyć następującego kodu.

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);
}
Odpowiedział 02/03/2016 o 10:32
źródło użytkownik

głosy
6

Silverlight nie jest tam ToTitleCasew TextInfoklasie.

Oto prosty sposób regex bazie.

Uwaga: Silverlight nie ma skompilowane regexes, ale dla mnie to strata wydajność nie jest problemem.

    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();
        });
    }
Odpowiedział 09/06/2010 o 05:24
źródło użytkownik

głosy
5

W Perl:

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

To nawet w FAQ.

Odpowiedział 29/09/2008 o 23:35
źródło użytkownik

głosy
5

Jeśli język używasz ma obsługiwanej metody / funkcji następnie po prostu użyć, że (jak w C # ToTitleCasemetody)

Jeśli nie, to będziemy chcieli zrobić coś jak następuje:

  1. Czytaj w ciągu
  2. Podjąć pierwsze słowo
  3. Pierwszą literę tego słowa 1
  4. Idź do przodu i znaleźć następne słowo
  5. Idź do 3, jeśli nie na końcu łańcucha, inaczej wyjście

1 Aby wykorzystać je, na przykład, C - użyć kodów ASCII znaleźć wartość całkowitą karbonizatu i odjąć 32 od niego.

Nie musiałyby być znacznie bardziej sprawdzanie błędów w kodzie (zapewnienie prawidłowych liter itd), a funkcja „Zainwestuj” będą musiały nałożyć jakiś tytuł programu „case” na listach w celu sprawdzenia słów, które nie wymagają być capatilised ( „a”, „ale” itd. Tutaj jest dobry schemat)

Odpowiedział 03/08/2008 o 17:33
źródło użytkownik

głosy
5

W jakim języku?

W PHP jest:

ucwords ()

przykład:

$HelloWorld = ucwords('hello world');
Odpowiedział 03/08/2008 o 17:12
źródło użytkownik

głosy
4

Excel-jak WŁASNA:

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;
}
Odpowiedział 02/03/2011 o 23:29
źródło użytkownik

głosy
2

http://titlecase.com/ma API

Odpowiedział 09/06/2010 o 05:09
źródło użytkownik

głosy
1

Oto prosty przykład jak to zrobić:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Odpowiedział 15/12/2017 o 11:54
źródło użytkownik

głosy
1

Oto implementacja w Pythonie: https://launchpad.net/titlecase.py

I port tej implementacji, że ja po prostu zrobić w C ++: http://codepad.org/RrfcsZzO

Odpowiedział 19/11/2012 o 08:59
źródło użytkownik

głosy
1

Jest wbudowany formuły PROPER(n)w programie Excel.

Był bardzo zadowolony, aby zobaczyć, że nie trzeba pisać to sam!

Odpowiedział 09/06/2010 o 05:07
źródło użytkownik

głosy
1

Myślę, że przy użyciu CultureInfo nie zawsze są wiarygodne, tego prosty i wygodny sposób manipulować ciąg ręcznie:

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;
Odpowiedział 07/12/2009 o 17:56
źródło użytkownik

głosy
-1

Tutaj masz wersję C ++. Jest tam zbiór non uppercaseable słów jak prononuns i przyimków. Jednak nie polecam automatyzację tego procesu, jeśli mają do czynienia z ważnych tekstów.

#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;
}
Odpowiedział 30/09/2008 o 00:27
źródło użytkownik

głosy
-1

Z Perl można to zrobić:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Odpowiedział 16/09/2008 o 12:11
źródło użytkownik

głosy
-1

Bez korzystania z funkcji gotową, super prosty algorytm niskim poziomie, aby przekonwertować ciąg do tytułowej przypadku:


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

Ten asssumes „Convert znak na wielkie litery” zrobi to prawidłowo, niezależnie od tego, czy postać jest wielkość liter (na przykład „+”).

Odpowiedział 03/08/2008 o 17:25
źródło użytkownik

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