我目前正在尋找一個簡單的編程問題,可能會對優化起到有趣的作用 - 至少對於任何相信編程是藝術的人來說:)所以這裏是:如何在保持自然順序的情況下將Java long的字符串轉換爲字符串
如何在保持自然秩序的同時最大限度地將long作爲字符串表示?
此外,字符串表示應匹配^[A-Za-z0-9]+$
。 (我不是太嚴格這裏,但避免使用控制字符或任何可能引起頭痛與編碼,是在XML非法的,已換行,或類似的文字,一定會導致問題)
這裏有一個JUnit測試用例:
@Test
public void longConversion() {
final long[] longs = { Long.MIN_VALUE, Long.MAX_VALUE, -5664572164553633853L,
-8089688774612278460L, 7275969614015446693L, 6698053890185294393L,
734107703014507538L, -350843201400906614L, -4760869192643699168L,
-2113787362183747885L, -5933876587372268970L, -7214749093842310327L, };
// keep it reproducible
//Collections.shuffle(Arrays.asList(longs));
final String[] strings = new String[longs.length];
for (int i = 0; i < longs.length; i++) {
strings[i] = Converter.convertLong(longs[i]);
}
// Note: Comparator is not an option
Arrays.sort(longs);
Arrays.sort(strings);
final Pattern allowed = Pattern.compile("^[A-Za-z0-9]+$");
for (int i = 0; i < longs.length; i++) {
assertTrue("string: " + strings[i], allowed.matcher(strings[i]).matches());
assertEquals("string: " + strings[i], longs[i], Converter.parseLong(strings[i]));
}
}
,這裏是我要找的
public static class Converter {
public static String convertLong(final long value) {
// TODO
}
public static long parseLong(final String value) {
// TODO
}
}
我已經在如何處理這個問題的一些想法的方法。儘管如此,我仍然可以從社區獲得一些不錯的(創造性)建議。
此外,這將是很好,如果這種轉換會
- 儘可能短
- 容易在其他語言 實施
編輯:我很高興地看到,兩位非常有信譽的程序員遇到同樣的問題,因爲我使用' - '作爲負數不能正常工作,因爲' - '不反轉排序順序:
- -0001
- -0002
- 技術
我會使用'String.format' ...哦,並缺少線程(聯合國)安全免責聲明 – 2010-02-10 11:45:00
@Int:你可以使用'String.format',但你需要一些東西來解析它轉換反正另一種方式所以你可以用一種方法來做。 – cletus 2010-02-10 11:56:59
簡單,呃?不起作用 - 請參閱我的編輯;) – sfussenegger 2010-02-10 12:26:30