2011-08-09 3 views
3

У меня есть строки, как это:Есть простой способ, чтобы обрезать последние три символа от строки

var a = "abcdefg"; 
var b = "xxxxxxxx"; 

Струна всегда длиннее пяти символов.

Теперь мне нужно обрезать последние 3 символа. Есть ли простой способ, которым я могу это сделать с C#?

+5

Что это? Четыре или три? У вас есть титул, а вопрос - разные. –

ответ

9

В тривиальном случае вы можете просто использовать

result = s.Substring(0, s.Length-3); 

удалить последние три символа из строки.

Или, как Джейсон предложил Remove альтернатива:

result = s.Remove(s.Length-3) 

К сожалению юникод строк может быть несколько проблем:

  • Юникода элемент кода может состоять из нескольких char s, так как кодировка строки - UTF-16 (см. пары суррогатов). Это происходит только для символов вне базовой плоскости, то есть имеющих кодовую точку> 2^16. Это актуально, если вы хотите поддержать китайцев.
  • Символ (графический символ) может состоять из нескольких кодовых точек. Например, ä можно записать как a, за которым следует объединение ¨.
  • Поведение с правым налево письменной формой не может быть то, что вы хотите либо
1
string newString = oldString.Substring(0, oldString.Length - 4); 
1
string a = "abcdefg"; 
a = a.Remove(a.Length - 3); 
+1

Возможно, вам нужно вернуть результат на 'a'? 'a = a.Remove (a.Length - 3);' – Bazzz

+0

@Bazzz, вы правы, конечно - строка неизменна. Спасибо, исправлено. – Jan

4

Вы хотите String.Remove(Int32)

Удаляет все символы из этой строки, начиная с заданным и продолжением последней позиции.

Если вы хотите выполнить проверку, по линии ответа druttka, я хотел бы предложить создать метод расширения

public static class MyStringExtensions 
{ 
    public static string SafeRemove(this string s, int numCharactersToRemove) 
    { 
    if (numCharactersToRemove > s.Length) 
    { 
     throw new ArgumentException("numCharactersToRemove"); 
    } 

    // other validation here 

    return s.Remove(s.Length - numCharactersToRemove); 
    } 
} 

var s = "123456"; 
var r = s.SafeRemove(3); //r = "123" 
var t = s.SafeRemove(7); //throws ArgumentException 
+0

+1 Подстрока сделает это, но почему бы не использовать правильный инструмент для работы? – Bazzz

+0

Важно отметить, что поскольку строка неизменна, это не изменяет исходную строку, но возвращает измененную строку. – CodesInChaos

0

Если вы действительно только нужно обрезать последние 3 символа, вы можете сделать это

string a = "abcdefg"; 
if (a.Length > 3) 
{ 
    a = a.Substring(0, a.Length-3); 
} 
else 
{ 
    a = String.Empty; 
} 
Смежные вопросы