# Natural sorting order for alphanumeric fields

Discussion in 'Java' started by Paul, Sep 14, 2004.

1. ### PaulGuest

I have a field that contains both numeric and alphanumeric entries, so
e.g. when I do an 'order by' in sql I would get the following order

1.2
1.25
1.3
3
50
6
ALMERA
FOCUS

But in this case , the 6 should be above the 50, but the order by
looks at the first digit only.

To get around this, I tried two implemetations of the comparator class
that I found on the web
http://pierre-luc.paour.9online.fr/NaturalOrderComparator.java and
http://www.davekoelle.com/alphanum.jsp. These seemed to work well
EXCEPT for the cases containing decimal points
i.e. in the following order
1.2
1.3
1.25

Does anyone know of a sort that gets around this problem.

Paul, Sep 14, 2004

2. ### Rogan DawesGuest

Paul wrote:

> I have a field that contains both numeric and alphanumeric entries, so
> e.g. when I do an 'order by' in sql I would get the following order
>
> 1.2
> 1.25
> 1.3
> 3
> 50
> 6
> ALMERA
> FOCUS
>
> But in this case , the 6 should be above the 50, but the order by
> looks at the first digit only.
>
> To get around this, I tried two implemetations of the comparator class
> that I found on the web
> http://pierre-luc.paour.9online.fr/NaturalOrderComparator.java and
> http://www.davekoelle.com/alphanum.jsp. These seemed to work well
> EXCEPT for the cases containing decimal points
> i.e. in the following order
> 1.2
> 1.3
> 1.25
>
> Does anyone know of a sort that gets around this problem.

public class Sorter implements Comparator {

int compare(Object o1, Object o2) {

if (o1 instanceof Number && o2 instanceof Number) {
return ((Number)o1).compareTo(o2);
} else {
return o1.toString().compareTo(o2.toString());
}

}

}

This assumes that your objects are the right type. If they are not, you
need to determine whether they are numbers or not, before comparing them.

Rogan
--
Rogan Dawes

*ALL* messages to will be dropped, and added
to my blacklist. Please respond to "nntp AT dawes DOT za DOT net"

Rogan Dawes, Sep 14, 2004