2015-06-09 2 views
0

я хочу что-то похожее на this question I found привести меня к this answer on another question, где я попытался преобразовать его из в моя попытка преобразовать его ... не удалось очень плохо:раздвоенный строку, удалив середину строки вместо конца

private string trimString(string str, int maxCharacters = 16) 
{ 
     int textLength = str.Length; 
     return str.Substring(maxCharacters/2, textLength-maxCharacters).Insert(maxCharacters/2,"..."); 
} 

Так делает trimString("123456789", 9) выходов 123...789, когда я хотел сделать что-то вроде 123...012 или что-то подобное .. я не могу вполне понять это, и я попробовал много разных версий, в основном в результате чего на входе, который вышел из строя.

Если возможно Я бы хотел, чтобы это была простая функция и не включала другие библиотеки или инициализировала новый объект при каждом вызове, поскольку я планирую использовать это в быстрой сессии. Мне бы очень хотелось, чтобы он не прерывал слова и не размещал эллипсы, но это не требуется.

+0

Итак, вы хотите, чтобы удалить символы из середины строки, как многие символы, которые вы хотите удалить, и хотите заменить их на '.'? как насчет строк с четным количеством символов? как бы вы тогда определили середину? – Habib

+0

Так что, по сути, вам нужны первые 3 и последние 3 символа строки. Правильно? – Rahul

+0

Да. Подобно функции моего старого телефона, заменив длинную строку на начало, обрезая середину и оставив конец нетронутым. Например, «Боб нуждается в них ... к 12:30 в понедельник» или тому подобное. – Codingale

ответ

2

Проблема заключается в том, что Substring(maxCharacters/2, textLength-maxCharacters), в которую вы вставили ... уже есть символы, которые вы не хотите видеть - 456789. После этого невозможно исправить это.

Что вы должны сделать вместо этого выбрать префикс и суффикс, и соединить их вместе, как это:

private static string trimString(string str, int maxCharacters = 16) { 
    if (str.Length <= maxCharacters) { 
     return str; 
    } 
    var suffixLength = maxCharacters/2; 
    // When maxCharacters is odd, prefix will be longer by one character 
    var prefixLength = maxCharacters - suffixLength; 
    return string.Format(
     "{0}...{1}" 
    , str.Substring(0, prefixLength) 
    , str.Substring(str.Length-suffixLength, suffixLength) 
    ); 
} 

Demo.

+0

Хорошее улучшение при проверке str.Length на maxCharacters, поскольку этот необязательный аргумент имеет значение по умолчанию. –

+0

Хотя мне нравятся более мелкие функции, такие как двухстрочная версия, с которой вы изначально работали, это работает значительно лучше, хотя я немного опечален тем, что C# в этом случае не так прост, как PHP. – Codingale

1

это возвращает 123...012 для trimString("123456789012", 6) первый и последний 3 персонажа, разделенные ....

public static string trimString(string str, int max = 16) 
{ 
    if (str.Length <= max) 
    { 
     return str; 
    } 
    return str.Substring(0, max/2) + "..." + str.Substring(str.Length - max/2, max/2); 
} 
+0

Это то, что я планировал, но не мог сделать. Мне нравится, что он полагается исключительно на подстроку, и это должна быть простая операция по сравнению с другой функцией, но в моем случае это не имеет большого значения. – Codingale

Смежные вопросы