συμβολοσειρά μορφοποίησης σε περίπτωση τίτλου

ψήφοι
24

Πώς μπορώ να μορφοποιήσετε ένα string σε περίπτωση τίτλο ;

Δημοσιεύθηκε 03/08/2008 στις 17:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


18 απαντήσεις

ψήφοι
16

Εδώ είναι μια απλή στατική μέθοδος για να το κάνετε αυτό σε C #:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Απαντήθηκε 03/08/2008 στις 17:05
πηγή χρήστη

ψήφοι
13

Θα ήθελα να είναι δύσπιστοι όσον αφορά αυτόματα upcasing όλα τα κενά-προηγηθεί-λέξεις σε σενάρια όπου θα διέτρεχε τον κίνδυνο να προσελκύσει την οργή των nitpickers.

Θα ήθελα τουλάχιστον να εξετάσει την εφαρμογή ενός λεξικού για τις περιπτώσεις εξαίρεσης, όπως τα άρθρα και σύνδεσμοι. Βλέπω:

"Η Πεντάμορφη και το τέρας"

Και όταν πρόκειται για κύρια ονόματα, το πράγμα γίνεται πολύ πιο άσχημο.

Απαντήθηκε 03/08/2008 στις 20:10
πηγή χρήστη

ψήφοι
10

Εδώ είναι μια λύση Perl http://daringfireball.net/2008/05/title_case

Εδώ είναι μια λύση Ruby http://frankschmitt.org/projects/title-case

Εδώ είναι μια Ruby λύση του ενός επένδυση: http://snippets.dzone.com/posts/show/4702

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

Τι το ένα-liner κάνει είναι χρησιμοποιώντας μια κανονική αλλαγή έκφραση του πρώτου χαρακτήρα κάθε λέξης με το κεφαλαίο εκδοχή της.

Απαντήθηκε 03/08/2008 στις 19:22
πηγή χρήστη

ψήφοι
8

Για να το capatilise σε, ας πούμε, C - χρησιμοποιούν τους κωδικούς ASCII ( http://www.asciitable.com/ ) για να βρει το ακέραια τιμή του εξανθρακώματος και αφαιρούμε 32 από αυτό.

Αυτό είναι μια κακή λύση, αν ποτέ σκοπεύετε να δέχονται χαρακτήρες πέρα ​​από az και AZ.

Για παράδειγμα: ASCII 134: Α, ASCII 143: Α.
Χρησιμοποιώντας αριθμητική σας παίρνει: ASCII 102: f

Χρησιμοποιήστε τις κλήσεις βιβλιοθήκη, μην υποθέσετε ότι μπορείτε να χρησιμοποιήσετε ακέραια αριθμητική για τους χαρακτήρες σας να πάρει πίσω κάτι χρήσιμο. Unicode είναι δύσκολο .

Απαντήθηκε 04/08/2008 στις 22:16
πηγή χρήστη

ψήφοι
6

Στην Java, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα.

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);
}
Απαντήθηκε 02/03/2016 στις 10:32
πηγή χρήστη

ψήφοι
6

Σε Silverlight δεν υπάρχει ToTitleCaseστην TextInfoτάξη.

Εδώ είναι μια απλή τυπική έκφραση που βασίζεται τρόπο.

Σημείωση: Silverlight δεν έχει precompiled regexes, αλλά για μένα αυτή η απώλεια απόδοσης δεν είναι ένα ζήτημα.

    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();
        });
    }
Απαντήθηκε 09/06/2010 στις 05:24
πηγή χρήστη

ψήφοι
5

Στην Perl:

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

Αυτό είναι ακόμη στο FAQ.

Απαντήθηκε 29/09/2008 στις 23:35
πηγή χρήστη

ψήφοι
5

Εάν η γλώσσα που χρησιμοποιείτε έχει μια υποστηριζόμενη μέθοδος / λειτουργία, στη συνέχεια, απλά χρησιμοποιήστε αυτό (όπως και στην C # ToTitleCaseμεθόδου)

Αν δεν το κάνει, τότε θα θέλετε να κάνετε κάτι σαν το παρακάτω:

  1. Διαβάστε στο κορδόνι
  2. Πάρτε την πρώτη λέξη
  3. Κεφαλαίο το πρώτο γράμμα της λέξης 1
  4. Μετάβαση προς τα εμπρός και να βρει την επόμενη λέξη
  5. Πηγαίνετε στο 3 αν όχι στο τέλος του string, διαφορετικά έξοδο

1 Για να κεφαλαιοποιήσει σε, ας πούμε, C - χρησιμοποιήστε τους κωδικούς ASCII για να βρει το ακέραια τιμή του εξανθρακώματος και αφαιρούμε 32 από αυτό.

Θα πρέπει να υπάρχει πολύ περισσότερο έλεγχο στον κώδικα (τη διασφάλιση έγκυρων επιστολών κ.λπ.) λάθους, και η λειτουργία «κεφαλαίο» θα πρέπει να επιβάλει ένα είδος «σχεδίου τίτλο-περίπτωση» στα γράμματα για να ελέγξει για λέξεις που δεν χρειάζονται να capatilised ( «και», «αλλά» κ.λπ. Εδώ είναι ένα καλό σύστημα)

Απαντήθηκε 03/08/2008 στις 17:33
πηγή χρήστη

ψήφοι
5

Σε ποια γλώσσα;

Στην PHP είναι:

ucwords ()

παράδειγμα:

$HelloWorld = ucwords('hello world');
Απαντήθηκε 03/08/2008 στις 17:12
πηγή χρήστη

ψήφοι
4

Excel-όπως ΣΩΣΤΗ:

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;
}
Απαντήθηκε 02/03/2011 στις 23:29
πηγή χρήστη

ψήφοι
2

http://titlecase.com/έχει ένα API

Απαντήθηκε 09/06/2010 στις 05:09
πηγή χρήστη

ψήφοι
1

Εδώ είναι ένα απλό παράδειγμα για το πώς να το κάνουμε:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Απαντήθηκε 15/12/2017 στις 11:54
πηγή χρήστη

ψήφοι
1

Εδώ είναι μια εφαρμογή σε Python: https://launchpad.net/titlecase.py

Και ένα λιμάνι της εφαρμογής που έχω μόλις κάνει σε C ++: http://codepad.org/RrfcsZzO

Απαντήθηκε 19/11/2012 στις 08:59
πηγή χρήστη

ψήφοι
1

Υπάρχει ένα ενσωματωμένο στον τύπο PROPER(n)στο Excel.

Ήταν πολύ χαρούμενος που βλέπω εγώ δεν πρέπει να το γράψω εγώ!

Απαντήθηκε 09/06/2010 στις 05:07
πηγή χρήστη

ψήφοι
1

Νομίζω ότι με τη χρήση του CultureInfo δεν είναι πάντοτε αξιόπιστη, αυτό το το απλό και πρακτικό τρόπο για να χειραγωγήσουν κορδόνι με μη αυτόματο τρόπο:

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;
Απαντήθηκε 07/12/2009 στις 17:56
πηγή χρήστη

ψήφοι
-1

Εδώ έχετε μια ++ έκδοση C. Έχει μια σειρά από μη uppercaseable λέξεις όπως prononuns και προθέσεις. Ωστόσο, εγώ δεν θα συνιστούσα την αυτοματοποίηση αυτής της διαδικασίας, αν είναι να ασχοληθεί με σημαντικά κείμενα.

#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;
}
Απαντήθηκε 30/09/2008 στις 00:27
πηγή χρήστη

ψήφοι
-1

Με perl θα μπορούσατε να το κάνετε αυτό:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Απαντήθηκε 16/09/2008 στις 12:11
πηγή χρήστη

ψήφοι
-1

Χωρίς τη χρήση έτοιμων λειτουργιών, μια υπερ-απλό αλγόριθμο χαμηλού επιπέδου για να μετατρέψετε μια συμβολοσειρά σε περίπτωση τίτλο:


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

Αυτό asssumes η «μετατροπή χαρακτήρων σε κεφαλαία» θα κάνουμε αυτό σωστά, ανεξάρτητα από το αν ή όχι ο χαρακτήρας είναι διάκριση πεζών-κεφαλαίων (π.χ., «+»).

Απαντήθηκε 03/08/2008 στις 17:25
πηγή χρήστη

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