Сравнить номера версий без использования функции split
Как сравнить номера версий?
Например:
x = 1.23.56.1487.5
- Что означает {0}, когда он найден в строке в C #?
- Снижение производительности String.intern ()
- Как разбить строку, разделенную запятой?
- Java: String split (): Я хочу, чтобы он включал пустые строки в конце
- Как удалить строки из начала и конца строки (Java)?
y = 1,24,55,487,2
- Java разделяет строку на массив
- Проверьте, соответствует ли строка регулярному выражению в сценарии Bash
- Разделить строку с точкой в качестве разделителя
- Метод split () в Java не работает с точкой (.)
- Не являются ли строки Python неизменяемыми? Тогда почему работает + "" + b?
- Почему class String объявлен окончательным в Java?
- Как удалить разрывы строк из файла в Java?
- Как написать символ и в файле android strings.xml
Можете ли вы использовать class версии?
http://msdn.microsoft.com/en-us/library/system.version.aspx
Он имеет интерфейс IComparable. Помните, что это не будет работать с версией из 5 частей, как показано на рисунке (это действительно ваша строка версии?). Предполагая, что ваши входы являются строками, вот рабочий пример с обычной версией версии .NET 4-part:
static class Program { static void Main() { string v1 = "1.23.56.1487"; string v2 = "1.24.55.487"; var version1 = new Version(v1); var version2 = new Version(v2); var result = version1.CompareTo(version2); if (result > 0) Console.WriteLine("version1 is greater"); else if (result < 0) Console.WriteLine("version2 is greater"); else Console.WriteLine("versions are equal"); return; } }
Если вы можете жить с помощью схемы major.minor.build.revision, вы можете использовать class .Net Version . В противном случае вам придется реализовать какой-то синтаксический анализ слева направо и продолжить до тех пор, пока не получите разницу или не верните, что две версии равны.
public int compareVersion(string Version1,string Version2) { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"([\d]+)"); System.Text.RegularExpressions.MatchCollection m1 = regex.Matches(Version1); System.Text.RegularExpressions.MatchCollection m2 = regex.Matches(Version2); int min = Math.Min(m1.Count,m2.Count); for(int i=0; iConvert.ToInt32(m2[i].Value)) { return 1; } if(Convert.ToInt32(m1[i].Value)
В дополнение к ответу @JohnD может потребоваться сравнить только частичные номера версий, не используя Split (‘.’) Или другую строку <-> int change bloat. Я только что написал метод расширения CompareTo с 1 дополнительным аргументом – количество значимых частей номера версии для сравнения (между 1 и 4).
public static class VersionExtensions { public static int CompareTo(this Version version, Version otherVersion, int significantParts) { if(version == null) { throw new ArgumentNullException("version"); } if(otherVersion == null) { return 1; } if(version.Major != otherVersion.Major && significantParts >= 1) if(version.Major > otherVersion.Major) return 1; else return -1; if(version.Minor != otherVersion.Minor && significantParts >= 2) if(version.Minor > otherVersion.Minor) return 1; else return -1; if(version.Build != otherVersion.Build && significantParts >= 3) if(version.Build > otherVersion.Build) return 1; else return -1; if(version.Revision != otherVersion.Revision && significantParts >= 4) if(version.Revision > otherVersion.Revision) return 1; else return -1; return 0; } }