gpanther/java-nat-sort


Java implementation of the "natural sort" (also known as Alphanum sort) algorithm

Download


Step 1. Add the JitPack repository to your build file

Add it in your root settings.gradle at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url 'https://jitpack.io' }
		}
	}

Add it in your settings.gradle.kts at the end of repositories:

	dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Add to pom.xml

	<repositories>
		<repository>
		    <id>jitpack.io</id>
		    <url>https://jitpack.io</url>
		</repository>
	</repositories>

Add it in your build.sbt at the end of resolvers:

 
    resolvers += "jitpack" at "https://jitpack.io"
        
    

Add it in your project.clj at the end of repositories:

 
    :repositories [["jitpack" "https://jitpack.io"]]
        
    

Step 2. Add the dependency

	dependencies {
		implementation 'com.github.gpanther:java-nat-sort:natural-comparator-1.1'
	}
	dependencies {
		implementation("com.github.gpanther:java-nat-sort:natural-comparator-1.1")
	}
	<dependency>
	    <groupId>com.github.gpanther</groupId>
	    <artifactId>java-nat-sort</artifactId>
	    <version>natural-comparator-1.1</version>
	</dependency>

                            
    libraryDependencies += "com.github.gpanther" % "java-nat-sort" % "natural-comparator-1.1"
        
        

                            
    :dependencies [[com.github.gpanther/java-nat-sort "natural-comparator-1.1"]]
        
        

Readme


java-nat-sort

Java implementation of the "natural sort" (also known as Alphanum sort) algorithm which gives a more "natural" ordering when presenting the sorted list of strings to humans.

For example, given the following strings:

a1.txt
a2.txt
a10.txt

A traditional sort algorithm would sort them like:

a1.txt
a10.txt
a2.txt

While this algorithm would give the initial ("natural") order.

Features:

  • Self-contained, no other dependencies
  • Compiled for Java 6
  • Relatively fast, does not allocate extra objects ("garbage free")
  • Has a case sensitive and a case insensitive option
  • Available under the Apache v2.0 License

Shortcoming / opportunity for improvement:

  • Does not play nice with Unicode, especially characters which are outside of the BMP
  • Does not handle fractions or grouping characters properly (ie. 100,000.50)
  • Only understands integer values up to 2^64-1

Get it from Maven Central:

<dependency>
    <groupId>net.grey-panther</groupId>
    <artifactId>natural-comparator</artifactId>
    <version>1.1</version>
</dependency>