2013-12-18 3 views
1

нужно получить подстроку из строки из «1.2.3.4» на «1,2» У меня есть такое решение:Лучший способ разбить строку на предпоследнем точка на C#

string version = "1.2.3.4"; 
var major = version.Substring(0, version.Substring(0, version.LastIndexOf('.')).LastIndexOf('.')); 

, но это выглядит некрасиво. Какой был бы лучший способ сделать это? (примечание) начальная строка может быть разного размера, например 11.22.33.44 или другая

+1

Разделитель всегда является второй точкой? – Crasher

+0

Как обычно, каково ваше определение _best_? – Steve

+1

Вы всегда можете установить правильную версию сборки и использовать встроенное свойство Version каждой сборки для доступа к различным частям версии. – pasty

ответ

8

Что-то вроде этого?

var newstr = String.Join(".", "1.2.3.4".Split('.').Take(2)); 

Или, может быть, вы хотите использовать Version класс

var ver = new Version("1.2.3.4"); 
Console.WriteLine(ver.Major + "." + ver.Minor); 
+0

Взял слова прямо из уст :) – dotTutorials

+0

Черт, рад, что я обновил страницу, прежде чем отправил свой ответ, э-э, ваш ответ. +1 – TyCobb

0

Как насчет этого?

string version = "1.2.3.4"; 
int pos1 = version.IndexOf("."); 
if (pos1 >= 0) 
{ 
    pos1++; 
    int pos2 = version.IndexOf(".", pos1); 
    if (pos2 >= 0) 
    { 
     version = version.Substring(0, pos2); 
    } 
} 
2

Рассмотрите возможность использования Version класса:

string version = "1.2.3.4"; 
Version ver = new Version(version); 

И тогда вы можете объединить Major и Minor

var major = string.Format("{0}.{1}", ver.Major, ver.Minor); 

Это даст вам "1.2"

0

Я хотел бы использовать регулярное выражение для них вид разбора:

string version = "1.2.3.4"; 
    string sub = Regex.Match(version, @"[1-9].[1-9]").ToString(); 
0

Ну, вот еще один способ сделать это. Хотя вы, вероятно, должны использовать класс Version.

string version = "1.2.3.4"; 

int indexOfFirstDot = version.IndexOf('.', 0); 
int indexOfSecondDot = version.IndexOf('.', indexOfFirstDot+1); 

string majorAndMinorVersion = version.Substring(0, indexOfSecondDot); 
Смежные вопросы