обрезать строку от первой буквы до первой точки?

У меня есть список строк. Они выглядят так: this.is.the.first.one that.is.the.second thishasnopoint У некоторых из них есть точки, а у некоторых нет точек. Мне нужно только обрезать строки от первой буквы до возможной первой точки, используя С#. Усеченные строки должны выглядеть следующим образом: this that thishasnopoint Поиски в Google не дают мне никаких полезных подсказок.


person user1154138    schedule 18.01.2012    source источник


Ответы (3)


Простой метод таков:

string firstBit = wholeString.Split('.')[0];

Split превращает его в массив строк, разделенных символом '.'. В случае thishasnopoint массив имеет только один элемент.

person David M    schedule 18.01.2012
comment
Slick..., и для тех строк, которые не имеют точки, всегда будет возвращена вся строка в нулевой позиции массива... Круто... - person DRapp; 18.01.2012

Теперь я правильно понял, строка состоит только из одной из этих последовательностей... так что это будет сделано:

var result = strings.Split('.').First();

Если строка была: this.is.the.first.one that.is.the.second thishasnopoint - одна строка это:

var firstWords = new List<string>();
strings.Split(' ').ForEach(x => firstWords.Add(x.Split('.').First()));

вернется:

List<string> с тремя струнами - this that thishasnopoint

person gdoron is supporting Monica    schedule 18.01.2012

string getTruncated(string s) {
    int startIdx = -1;
    for (int i = 0; i < s.Length; ++i) {
        if (Char.IsLetter(s[i])) {
            startIdx = i;
            break;
        }
    }
    int endIdx = s.IndexOf('.');
    if (startIdx != -1) {
        if (endIdx != -1) {
            return s.Substring(startIdx, endIdx);
        } else {
            return s.Substring(startIdx);
        }
    } else {
        throw new ArgumentException();
    }
}

Работает быстрее, чем метод "разделить", но сложнее.

person nazlo    schedule 18.01.2012
comment
Как разделение реализовано внутри? Что делает это быстрее? - person tbddeveloper; 18.01.2012
comment
Э... почему предполагается, что это зависит от производительности? Ваш код значительно менее ремонтопригоден, чем версии, использующие Split. Кроме того, если вам дана строка вроде 111.234, что не исключается OP, ваш код приведет к исключению ArgumentException. - person David M; 18.01.2012
comment
Hammerstein, метод split создает массив строк, например, для input == this.is.first.phrase функция split('.') вернет массив String[] {this, is, first, фраза}, в котором только ноль' st элемент используется, но другие должны быть GC. Дэвид М, как сказал создатель поста, результатом должна быть подстрока между первой буквой и первой точкой. Затем, если ввод состоит только из цифр, создается исключение. - person nazlo; 20.01.2012