Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Если я не неправильно понял Ваш вопрос, я не думаю, что Вам нужно к самокрутке, класс TextInfo может сделать это для Вас.
using System.Globalization;
CultureInfo.InvariantCulture.TextInfo.ToTitleCase("GeOrGE bUrdEll")
возвратит "George Burdell. И можно использовать собственную культуру, если существуют некоторые специальные включенные правила.
Обновление: Michael (в комментарии к этому ответу) указал, что это не будет работать, если вход будет всеми заглавными буквами, так как метод предположит, что это - акроним. Наивное обходное решение для этого является к.ToLower () текстом прежде, чем отправить его ToTitleCase.
Какой язык программирования Вы используете? Много языков позволяют функции обратного вызова для соответствий регулярного выражения. Они могут привыкнуть к propercase соответствие легко. Регулярное выражение, которое использовалось бы, довольно просто, просто необходимо соответствовать всем словесным символам, как так:
/\w+/
, С другой стороны, можно уже извлечь первый символ, чтобы быть дополнительным соответствием:
/(\w)(\w*)/
Теперь можно получить доступ к первым символьным и последовательным символам в соответствии отдельно. Функция обратного вызова может тогда просто возвратить конкатенацию хитов. В псевдо Python (я на самом деле не знаю Python):
def make_proper(match):
return match[1].to_upper + match[2]
Кстати, это также обработало бы случай “O'Reilly”, потому что “O” и “Reilly” будут подобраны отдельно и оба propercased. Существуют однако другие особые случаи, которые не обрабатываются хорошо алгоритмом, например, “McDonald's” или обычно любым apostrophed словом. Алгоритм произвел бы “Mcdonald'S” для последнего. Специальная обработка для апострофа могла быть реализована, но это вмешается в первый случай. Нахождение thereotical идеального решения не возможно. На практике это могло бы помочь рассмотрению длины части после апострофа.
@method
является тегом для документации (.Rd
файл), и @S3method
для механизма пространства имен. Вам требуются оба этих дня, если у Вас есть свое собственное NAMESPACE
файл. Вам только нужно @export
, если Вы действительно хотите сделать метод видимым вне пространства имен пакета.
– Gavin Simpson
3 November 2012 в 17:48
Вот, возможно, наивный C# implementation:-
public class ProperCaseHelper {
public string ToProperCase(string input) {
string ret = string.Empty;
var words = input.Split(' ');
for (int i = 0; i < words.Length; ++i) {
ret += wordToProperCase(words[i]);
if (i < words.Length - 1) ret += " ";
}
return ret;
}
private string wordToProperCase(string word) {
if (string.IsNullOrEmpty(word)) return word;
// Standard case
string ret = capitaliseFirstLetter(word);
// Special cases:
ret = properSuffix(ret, "'");
ret = properSuffix(ret, ".");
ret = properSuffix(ret, "Mc");
ret = properSuffix(ret, "Mac");
return ret;
}
private string properSuffix(string word, string prefix) {
if(string.IsNullOrEmpty(word)) return word;
string lowerWord = word.ToLower(), lowerPrefix = prefix.ToLower();
if (!lowerWord.Contains(lowerPrefix)) return word;
int index = lowerWord.IndexOf(lowerPrefix);
// If the search string is at the end of the word ignore.
if (index + prefix.Length == word.Length) return word;
return word.Substring(0, index) + prefix +
capitaliseFirstLetter(word.Substring(index + prefix.Length));
}
private string capitaliseFirstLetter(string word) {
return char.ToUpper(word[0]) + word.Substring(1).ToLower();
}
}
zlib
didn' t работают над моим Mac, таким образом, я должен был использовать abe.jar
для извлечения. См. мой ответ stackoverflow.com/a/48077004/4747587
– Henry
3 January 2018 в 12:07
простой способ использовать для своей выгоды первую букву каждого слова (разделенный пространством)
$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {
$s = strtolower($words[$i]);
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
$result .= “$s “;
}
$string = trim($result);
с точки зрения ловли примера "O'REILLY", который Вы дали разделению строки на обоих пробелах и, 'не будет работать, поскольку это использовало бы для своей выгоды любую букву, которая появилась после apostraphe т.е. s в Fred
, таким образом, я, вероятно, попробую что-то как
$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {
$s = strtolower($words[$i]);
if (substr($s, 0, 2) === "o'"){
$s = substr_replace($s, strtoupper(substr($s, 0, 3)), 0, 3);
}else{
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
}
$result .= “$s “;
}
$string = trim($result);
, Это должно поймать O'Reilly, Час, O'Donnell и т.д. надеется, что это помогает
, обратите внимание, что этот код не тестируется.
dd if=data.ab bs=24 skip=1 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > data.tar
– Marc_Alx
8 March 2018 в 13:30
Вы не упоминаете, какой язык Вы хотели бы решение в том, таким образом, вот некоторый псевдо код.
Loop through each character
If the previous character was an alphabet letter
Make the character lower case
Otherwise
Make the character upper case
End loop
Существует также этот аккуратный сценарий Perl для заключающего в корпус заголовок текста.
http://daringfireball.net/2008/08/title_case_update
#!/usr/bin/perl # This filter changes all words to Title Caps, and attempts to be clever # about *un*capitalizing small words like a/an/the in the input. # # The list of "small words" which are not capped comes from # the New York Times Manual of Style, plus 'vs' and 'v'. # # 10 May 2008 # Original version by John Gruber: # http://daringfireball.net/2008/05/title_case # # 28 July 2008 # Re-written and much improved by Aristotle Pagaltzis: # http://plasmasturm.org/code/titlecase/ # # Full change log at __END__. # # License: http://www.opensource.org/licenses/mit-license.php # use strict; use warnings; use utf8; use open qw( :encoding(UTF-8) :std ); my @small_words = qw( (?<!q&)a an and as at(?!&t) but by en for if in of on or the to v[.]? via vs[.]? ); my $small_re = join '|', @small_words; my $apos = qr/ (?: ['’] [[:lower:]]* )? /x; while ( <> ) { s{\A\s+}{}, s{\s+\z}{}; $_ = lc $_ if not /[[:lower:]]/; s{ \b (_*) (?: ( (?<=[ ][/\\]) [[:alpha:]]+ [-_[:alpha:]/\\]+ | # file path or [-_[:alpha:]]+ [@.:] [-_[:alpha:]@.:/]+ $apos ) # URL, domain, or email | ( (?i: $small_re ) $apos ) # or small word (case-insensitive) | ( [[:alpha:]] [[:lower:]'’()\[\]{}]* $apos ) # or word w/o internal caps | ( [[:alpha:]] [[:alpha:]'’()\[\]{}]* $apos ) # or some other word ) (_*) \b }{ $1 . ( defined $2 ? $2 # preserve URL, domain, or email : defined $3 ? "\L$3" # lowercase small word : defined $4 ? "\u\L$4" # capitalize word w/o internal caps : $5 # preserve other kinds of word ) . $6 }xeg; # Exceptions for small words: capitalize at start and end of title s{ ( \A [[:punct:]]* # start of title... | [:.;?!][ ]+ # or of subsentence... | [ ]['"“‘(\[][ ]* ) # or of inserted subphrase... ( $small_re ) \b # ... followed by small word }{$1\u\L$2}xig; s{ \b ( $small_re ) # small word... (?= [[:punct:]]* \Z # ... at the end of the title... | ['"’”)\]] [ ] ) # ... or of an inserted subphrase? }{\u\L$1}xig; # Exceptions for small words in hyphenated compound words ## e.g. "in-flight" -> In-Flight s{ \b (?<! -) # Negative lookbehind for a hyphen; we don't want to match man-in-the-middle but do want (in-flight) ( $small_re ) (?= -[[:alpha:]]+) # lookahead for "-someword" }{\u\L$1}xig; ## # e.g. "Stand-in" -> "Stand-In" (Stand is already capped at this point) s{ \b (?<!…) # Negative lookbehind for a hyphen; we don't want to match man-in-the-middle but do want (stand-in) ( [[:alpha:]]+- ) # $1 = first word and hyphen, should already be properly capped ( $small_re ) # ... followed by small word (?! - ) # Negative lookahead for another '-' }{$1\u$2}xig; print "$_"; } __END__
Но это походит надлежащим случаем, который Вы имеете в виду.. для имен людей только.
Kronoz, спасибо. Я нашел в Вашей функции что строка:
`if (!lowerWord.Contains(lowerPrefix)) return word`;
должен сказать
if (!lowerWord.StartsWith(lowerPrefix)) return word;
, таким образом, "informaciГіn" не изменяется на "InforMacIГіn"
лучше всего,
Enrique
Я использую это как обработчик событий textchanged для текстовых полей. Поддержите запись "Макдональдс"
Public Shared Function DoProperCaseConvert(ByVal str As String, Optional ByVal allowCapital As Boolean = True) As String
Dim strCon As String = ""
Dim wordbreak As String = " ,.1234567890;/\-()#$%^&*€!~+=@"
Dim nextShouldBeCapital As Boolean = True
'Improve to recognize all caps input
'If str.Equals(str.ToUpper) Then
' str = str.ToLower
'End If
For Each s As Char In str.ToCharArray
If allowCapital Then
strCon = strCon & If(nextShouldBeCapital, s.ToString.ToUpper, s)
Else
strCon = strCon & If(nextShouldBeCapital, s.ToString.ToUpper, s.ToLower)
End If
If wordbreak.Contains(s.ToString) Then
nextShouldBeCapital = True
Else
nextShouldBeCapital = False
End If
Next
Return strCon
End Function
@export
, потому что тогдаR CMD check
жаловался на недокументированные параметры (я hadn’t зарегистрировал метод с тех пор it’s предполагаемый быть невидимым так или иначе). Однако я не могу воспроизвести это теперь: никакой.Rd
файл сгенерирован и никакойR CMD check
, предупреждение отображено для недостающих параметров. У меня, вероятно, была некоторая пустая строка в комментарии документа заранее, заставляя неполную документацию быть сгенерированным для этого метода. – Konrad Rudolph 27 June 2015 в 09:19