@Test public void bigInt() { AlphanumComparator c = new AlphanumComparator(new Locale("es")); assertEquals(-1, c.compare("Hello 24", "Hello 7846785478595743")); assertEquals(-1, c.compare("Hello 7846785478595742", "Hello 7846785478595743")); }
@Override public int compare(CharSequence a, CharSequence b) { int lastEndA = 0; int lastEndB = 0; while (lastEndA < a.length() && lastEndB < b.length()) { int startA = findNextNumber(a, lastEndA); int startB = findNextNumber(b, lastEndB); if (startA == a.length() || startB == b.length()) { break; } if (lastEndA < startA || lastEndB < startB) { CharSequence subA = a.subSequence(lastEndA, startA); CharSequence subB = b.subSequence(lastEndB, startB); int c = collator.compare(subA, subB); if (c != 0) { return c; } } int endA = findNumberEnd(a, startA); int endB = findNumberEnd(b, startB); CharSequence subA = a.subSequence(startA, endA); CharSequence subB = b.subSequence(startB, endB); if (subA.length() > 9 || subB.length() > 9) { BigInteger ia = new BigInteger(subA.toString()); BigInteger ib = new BigInteger(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } else { Long ia = Long.parseLong(subA.toString()); Long ib = Long.parseLong(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } lastEndA = endA; lastEndB = endB; } if (lastEndA == 0 && lastEndB == 0) { return collator.compare(a, b); } if (lastEndA < a.length() || lastEndB < b.length()) { CharSequence subA = a.subSequence(lastEndA, a.length()); CharSequence subB = b.subSequence(lastEndB, b.length()); return collator.compare(subA, subB); } return 0; }
AlphanumComparator implements Comparator<CharSequence> { @Override public int compare(CharSequence a, CharSequence b) { int lastEndA = 0; int lastEndB = 0; while (lastEndA < a.length() && lastEndB < b.length()) { int startA = findNextNumber(a, lastEndA); int startB = findNextNumber(b, lastEndB); if (startA == a.length() || startB == b.length()) { break; } if (lastEndA < startA || lastEndB < startB) { CharSequence subA = a.subSequence(lastEndA, startA); CharSequence subB = b.subSequence(lastEndB, startB); int c = collator.compare(subA, subB); if (c != 0) { return c; } } int endA = findNumberEnd(a, startA); int endB = findNumberEnd(b, startB); CharSequence subA = a.subSequence(startA, endA); CharSequence subB = b.subSequence(startB, endB); if (subA.length() > 9 || subB.length() > 9) { BigInteger ia = new BigInteger(subA.toString()); BigInteger ib = new BigInteger(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } else { Long ia = Long.parseLong(subA.toString()); Long ib = Long.parseLong(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } lastEndA = endA; lastEndB = endB; } if (lastEndA == 0 && lastEndB == 0) { return collator.compare(a, b); } if (lastEndA < a.length() || lastEndB < b.length()) { CharSequence subA = a.subSequence(lastEndA, a.length()); CharSequence subB = b.subSequence(lastEndB, b.length()); return collator.compare(subA, subB); } return 0; } }
AlphanumComparator implements Comparator<CharSequence> { @Override public int compare(CharSequence a, CharSequence b) { int lastEndA = 0; int lastEndB = 0; while (lastEndA < a.length() && lastEndB < b.length()) { int startA = findNextNumber(a, lastEndA); int startB = findNextNumber(b, lastEndB); if (startA == a.length() || startB == b.length()) { break; } if (lastEndA < startA || lastEndB < startB) { CharSequence subA = a.subSequence(lastEndA, startA); CharSequence subB = b.subSequence(lastEndB, startB); int c = collator.compare(subA, subB); if (c != 0) { return c; } } int endA = findNumberEnd(a, startA); int endB = findNumberEnd(b, startB); CharSequence subA = a.subSequence(startA, endA); CharSequence subB = b.subSequence(startB, endB); if (subA.length() > 9 || subB.length() > 9) { BigInteger ia = new BigInteger(subA.toString()); BigInteger ib = new BigInteger(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } else { Long ia = Long.parseLong(subA.toString()); Long ib = Long.parseLong(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } lastEndA = endA; lastEndB = endB; } if (lastEndA == 0 && lastEndB == 0) { return collator.compare(a, b); } if (lastEndA < a.length() || lastEndB < b.length()) { CharSequence subA = a.subSequence(lastEndA, a.length()); CharSequence subB = b.subSequence(lastEndB, b.length()); return collator.compare(subA, subB); } return 0; } AlphanumComparator(Locale locale); }
AlphanumComparator implements Comparator<CharSequence> { @Override public int compare(CharSequence a, CharSequence b) { int lastEndA = 0; int lastEndB = 0; while (lastEndA < a.length() && lastEndB < b.length()) { int startA = findNextNumber(a, lastEndA); int startB = findNextNumber(b, lastEndB); if (startA == a.length() || startB == b.length()) { break; } if (lastEndA < startA || lastEndB < startB) { CharSequence subA = a.subSequence(lastEndA, startA); CharSequence subB = b.subSequence(lastEndB, startB); int c = collator.compare(subA, subB); if (c != 0) { return c; } } int endA = findNumberEnd(a, startA); int endB = findNumberEnd(b, startB); CharSequence subA = a.subSequence(startA, endA); CharSequence subB = b.subSequence(startB, endB); if (subA.length() > 9 || subB.length() > 9) { BigInteger ia = new BigInteger(subA.toString()); BigInteger ib = new BigInteger(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } else { Long ia = Long.parseLong(subA.toString()); Long ib = Long.parseLong(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } lastEndA = endA; lastEndB = endB; } if (lastEndA == 0 && lastEndB == 0) { return collator.compare(a, b); } if (lastEndA < a.length() || lastEndB < b.length()) { CharSequence subA = a.subSequence(lastEndA, a.length()); CharSequence subB = b.subSequence(lastEndB, b.length()); return collator.compare(subA, subB); } return 0; } AlphanumComparator(Locale locale); @Override int compare(CharSequence a, CharSequence b); }
AlphanumComparator implements Comparator<CharSequence> { @Override public int compare(CharSequence a, CharSequence b) { int lastEndA = 0; int lastEndB = 0; while (lastEndA < a.length() && lastEndB < b.length()) { int startA = findNextNumber(a, lastEndA); int startB = findNextNumber(b, lastEndB); if (startA == a.length() || startB == b.length()) { break; } if (lastEndA < startA || lastEndB < startB) { CharSequence subA = a.subSequence(lastEndA, startA); CharSequence subB = b.subSequence(lastEndB, startB); int c = collator.compare(subA, subB); if (c != 0) { return c; } } int endA = findNumberEnd(a, startA); int endB = findNumberEnd(b, startB); CharSequence subA = a.subSequence(startA, endA); CharSequence subB = b.subSequence(startB, endB); if (subA.length() > 9 || subB.length() > 9) { BigInteger ia = new BigInteger(subA.toString()); BigInteger ib = new BigInteger(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } else { Long ia = Long.parseLong(subA.toString()); Long ib = Long.parseLong(subB.toString()); int c = ia.compareTo(ib); if (c != 0) { return c; } } lastEndA = endA; lastEndB = endB; } if (lastEndA == 0 && lastEndB == 0) { return collator.compare(a, b); } if (lastEndA < a.length() || lastEndB < b.length()) { CharSequence subA = a.subSequence(lastEndA, a.length()); CharSequence subB = b.subSequence(lastEndB, b.length()); return collator.compare(subA, subB); } return 0; } AlphanumComparator(Locale locale); @Override int compare(CharSequence a, CharSequence b);  }