Извлечь последнее слово из строки, используя C # - PullRequest
24 голосов
/ 05 января 2011

Моя строка такая:

string input = "STRIP, HR 3/16 X 1 1/2 X 1 5/8 + API";

Здесь на самом деле я хочу извлечь последнее слово «API» и вернуть.

Каким будет код C # для выполнения вышеизложенного извлечения?

Ответы [ 7 ]

60 голосов
/ 05 января 2011

Ну, наивной реализацией этого было бы просто разделить каждый пробел и взять последний элемент.

Разделение выполняется с использованием метода экземпляра объекта String , ипоследний из элементов может быть извлечен с помощью индексации массива или с помощью оператора Last LINQ.

Конечный результат:

string lastWord = input.Split(' ').Last();

Если у вас нет LINQЯ хотел бы сделать это в две операции:

string[] parts = input.Split(' ');
string lastWord = parts[parts.Length - 1];

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

string input = ".... ,API";

Здесь запятая будет частью "слова".

Кроме того, если первый способ получения слова правильный, тоесть все после последнего пробела, и ваша строка соответствует следующим правилам:

  • Всегда будет содержать хотя бы один пробел
  • Не заканчивается одним или несколькими пробелами (в случаеэтого можно обрезать)

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

string lastWord = input.Substring(input.LastIndexOf(' ') + 1);

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

15 голосов
/ 05 января 2011

Сначала:

using System.Linq; // System.Core.dll

, затем

string last = input.Split(' ').LastOrDefault();

// or

string last = input.Trim().Split(' ').LastOrDefault();

// or

string last = input.Trim().Split(' ').LastOrDefault().Trim();
7 голосов
/ 05 января 2011

var last = input.Substring(input.LastIndexOf(' ')).TrimStart();

Этот метод не выделяет весь массив строк, как остальные.

3 голосов
/ 05 января 2011
string workingInput = input.Trim();
string last = workingInput.Substring(workingInput.LastIndexOf(' ')).Trim();

Хотя это может не сработать, если в строке нет пробелов. Я думаю, что расщепление излишне интенсивно только для одного слова :)

2 голосов
/ 24 января 2012
static class Extensions
{
    private static readonly char[] DefaultDelimeters = new char[]{' ', '.'};

    public string LastWord(this string StringValue)
    {
        return LastWord(StringValue, DefaultDelimeters);
    }

    public string LastWord(this string StringValue, char[] Delimeters)
    {
        int index = StringValue.LastIndexOfAny(Delimeters);

        if(index>-1)
            return StringValue.Substring(index);
        else
            return null;
    }
}

class Application
{
    public void DoWork()
    {
        string sentence = "STRIP, HR 3/16 X 1 1/2 X 1 5/8 + API";
        string lastWord = sentence.LastWord();
    }
}
2 голосов
/ 05 января 2011
var lastWord = input.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Last();
0 голосов
/ 05 января 2011
string input = "STRIP, HR 3/16 X 1 1/2 X 1 5/8 + API";
var a = input.Split(' ');
Console.WriteLine(a[a.Length-1]);
...