버전 번호를 비교하는 기능은 클라이언트 측과 관련된 시스템에서 종종 필요하지만, 버전 번호를 비교하는 것은 비교와 같은 문자열 비교 방법에 따라 완전히 사용할 수 없습니다.
이를 위해서는 버전 번호의 일반적인 규칙을 요약하고 비교 알고리즘을 설계하고 사용하는 일반적인 방법으로 캡슐화해야합니다.
일반적인 버전 번호는 다음과 같습니다. 1.3.20.8, 6.82.20160101, 8.5a/8.5c 등;
일반적인 규칙은 먼저 버전 문자열을 도트 번호로 나눈 다음 기본 버전을 기본 버전과 비교 한 다음이 버전을이 버전과 비교하여 크기가 나뉘어 질 때까지 하나씩 비교할 수 있도록하는 것입니다.
버전 번호를 비교하는 많은 방법을 버전 번호를 int 또는 이중 유형으로 변환하는 방법은 8.5C와 같은 문자를 포함 할 수 있기 때문에 보편적이지 않을 수 있습니다.
일반적인 방법은 분할 된 문자열을 문자열로 비교하는 것이지만 문자열을 비교하기 전에 먼저 비트 수를 비교하십시오.
버전 번호를 비교하는 메소드의 예 :
/*** 버전 번호의 크기를 비교하십시오. 전자가 큰 숫자를 반환하면 후자는 큰 숫자가 크고 마이너스 숫자를 반환하며, 동일하면 0 * @param version1 * @param version2 * @return */ public static int comparversion (string version1, String version2) 예외 {if (version1 == null || version2 == null) {vaske new Exception ( "비교 매개 변수."); } string [] versionarray1 = version1.split ( "//.") ;// 이것은 정기적 인 일치이며". " 사용할 수 없습니다. String [] versionarray2 = version2.split ( "//."); int idx = 0; int minlength = math.min (versionarray1.length, versionarray2.length); // 최소 길이 값을 얻습니다 int diff = 0; while (idx <minlength && (diff = versionarray1 [idx] .length () - versionarray2 [idx] .length ()) == 0 // 길이의 첫 번째 && (diff = versionarray1 [idx] .compareto (versionarray2 [idx]) == 0) {// ++ idx 비교; } // 크기가 나뉘어지면 직접 반환됩니다. 크기가 나뉘 지 않은 경우 비트 수를 다시 비교하십시오. 숫자의 하위 버전은 큽니다. diff = (diff! = 0)? diff : versionarray1.length- versionarray2.length; 반환 diff; } 참고 : 분할 메소드 매개 변수는 정기적 인 일치 표현식이며 ""로 사용할 수 없습니다. ( "."( "."정규 표현식의 값과 일치하려면). "//"사용해야합니다.
이런 식으로 먼저 하위 문자열 배열로 나눈 다음 전복 숫자를 하나씩 비교하십시오. 전복 숫자를 비교할 때 먼저 숫자 수를 비교하십시오. 숫자 숫자가 크면 숫자 숫자가 커집니다. 숫자 숫자가 동일하면 문자열 비교 방법에 따라 비교하십시오.
모든 비교가 완료되면 (버전 번호 중 하나가 비교 됨), 어떤 버전 번호가 더 많은 전복 숫자, 즉 분할 배열의 길이 및 전복 숫자가 더 큽니다.
이런 식으로 다양한 상황이 더 철저하게 간주되고 버전 번호 크기가 비교됩니다. 문자 접미사를 포함하여 사용할 수 있습니다.
예를 들어, "9.9", "10.8.8.6", String으로 직접 비교하면 전자는 더 크고 후자는 더 작아서 분명히 잘못된 것입니다. 세분화 후, 첫 번째 주요 버전 9 및 10을 비교하고 숫자에서 결과가 커질 것입니다.
예를 들어, "9.9b", "9.8a"등도 적용 할 수 있지만 Int 또는 Double으로 변환하는 방법이 사용되는 경우에도 적용되지 않습니다.