Ja daran hatte ich schon gedacht.Die Strings an den Punkten in ein Array splitten und dann beide Arrays von links durch rechts durchlaufen und gucken an welcher Stelle der erste Unterschied vorhanden ist. Wenn du den ersten Unterschied ermittelt hast, guckste einfach, welche Zahl größer ist.
public class Version implements Comparable<Version>
{
private String version;
/**
* Gibt den Versionsstring zurück
* @return String
*/
public final String get()
{
return this.version;
}
public Version( String version )
{
if ( version == null )
{
throw new IllegalArgumentException( "Version can not be null" );
}
if ( !version.matches( "[0-9]+(\\.[0-9]+)*" ) )
{
throw new IllegalArgumentException( "Invalid version format" );
}
this.version = version;
}
@Override
public int compareTo( Version that )
{
if ( that == null )
{
return 1;
}
String[] thisParts = this.get().split( "\\." );
String[] thatParts = that.get().split( "\\." );
int length = Math.max( thisParts.length, thatParts.length );
for ( int i = 0; i < length; i++ )
{
int thisPart = i < thisParts.length
? Integer.parseInt( thisParts[i] ) : 0;
int thatPart = i < thatParts.length
? Integer.parseInt( thatParts[i] ) : 0;
if ( thisPart < thatPart )
{
return -1;
}
if ( thisPart > thatPart )
{
return 1;
}
}
return 0;
}
@Override
public boolean equals( Object that )
{
if ( this == that )
{
return true;
}
if ( that == null )
{
return false;
}
if ( this.getClass() != that.getClass() )
{
return false;
}
return this.compareTo( (Version) that ) == 0;
}
@Override
public int hashCode()
{
int hash = 5;
hash = 13 * hash + Objects.hashCode( this.version );
return hash;
}
@Override
public String toString()
{
return version;
}
}
Keine gute Idee