Форматной строки в заголовке дела

голоса
24

Как форматировать строку заголовка дела ?

Задан 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 d 17:05
источник пользователем

голоса
13

Я бы остерегаться автоматически upcasing всех пробельных-предшествуют-слова в сценариях, где я бы опасность привлечения неистовства nitpickers.

Я, по крайней мере, рассмотреть возможность реализации словаря для исключительных ситуаций, таких как статьи и союзы. Вот:

"Красавица и чудовище"

И когда речь идет о собственных именах, вещь становится намного уродливее.

Ответил 03/08/2008 d 20:10
источник пользователем

голоса
10

Вот решение Perl http://daringfireball.net/2008/05/title_case

Вот решение Руби http://frankschmitt.org/projects/title-case

Вот рубин решение один вкладыш: http://snippets.dzone.com/posts/show/4702

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

То, что один вкладыш делает это с использованием регулярных выражений замены первого символа каждого слова с прописным вариантом.

Ответил 03/08/2008 d 19:22
источник пользователем

голоса
8

Для того, чтобы capatilise его, скажем, С - использовать коды ASCII ( http://www.asciitable.com/ ) , чтобы найти целое значение полукокса и вычесть 32 из него.

Это плохое решение, если вы когда-либо планируете принимать символы за пределами Аз и AZ.

Например: ASCII 134: A, ASCII 143: Å.
Использование арифметических операций получает вас: ASCII 102: е

Использование библиотечных вызовов, не предполагает , что вы можете использовать целочисленную арифметику на ваши персонаж , чтобы получить обратно что - то полезное. Unicode является сложным .

Ответил 04/08/2008 d 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 d 10:32
источник пользователем

голоса
6

Нет В Silverlight нет ToTitleCaseв TextInfoклассе.

Вот простой способ регулярных выражений на основе.

Примечание: Silverlight не скомпилированных регулярных выражений, но для меня это потеря производительности не является проблемой.

    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 d 05:24
источник пользователем

голоса
5

В Perl:

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

Это даже в FAQ.

Ответил 29/09/2008 d 23:35
источник пользователем

голоса
5

Если язык , который вы используете имеет поддерживаемый метод / функцию , то просто использовать , что (как и в C # ToTitleCaseметод)

Если этого не произойдет, то вы хотите сделать что-то вроде следующего:

  1. Читайте в строке
  2. Возьмем первое слово
  3. Прописной первую букву этого слова 1
  4. Идите вперед и найти следующее слово
  5. Перейти к 3, если не в конце строки, в противном случае выход

1 Для того, чтобы извлечь выгоду его, скажем, C - использовать коды ASCII , чтобы найти целое значение полукокса и вычесть 32 из него.

Там должны быть гораздо более проверки ошибок в коде (обеспечение действительные письма и т.д.), а функция «заглавной» нужно будет ввести какой - то «титульный случае схемы» на буквы , чтобы проверить слова , которые не нуждаются быть capatilised ( «и», «но» и т.д. Вот хорошая схема)

Ответил 03/08/2008 d 17:33
источник пользователем

голоса
5

На каком языке?

В PHP это:

ucwords ()

пример:

$HelloWorld = ucwords('hello world');
Ответил 03/08/2008 d 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 d 23:29
источник пользователем

голоса
2

http://titlecase.com/имеет API

Ответил 09/06/2010 d 05:09
источник пользователем

голоса
1

Вот простой пример того, как это сделать:

public static string ToTitleCaseInvariant(string str)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str);
}
Ответил 15/12/2017 d 11:54
источник пользователем

голоса
1

Вот реализация в Python: https://launchpad.net/titlecase.py

И порт этой реализации , что я только что сделал в C ++: http://codepad.org/RrfcsZzO

Ответил 19/11/2012 d 08:59
источник пользователем

голоса
1

Существует встроенный в формулу PROPER(n)в Excel.

Был очень рад видеть, что я не должен писать это сам!

Ответил 09/06/2010 d 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 d 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 d 00:27
источник пользователем

голоса
-1

С Perl'ми вы можете сделать это:

my $tc_string = join ' ', map { ucfirst($\_) } split /\s+/, $string;
Ответил 16/09/2008 d 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 d 17:25
источник пользователем

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