0
我想將字符串行轉換爲長數字。 我這樣做:流減少錯誤地使用長型
String line = "eRNLpuGgnON";
char[] chars = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890-_".toCharArray();
Map<Character, Integer> charToInt =
IntStream.rangeClosed(0, chars.length - 1)
.boxed()
.collect(Collectors
.toMap(i -> (chars[i]), i -> i));
long l = line.chars()
.mapToObj(i -> (char) i)
.map(charToInt::get)
.reduce((int) 0L, ((a, b) -> a * chars.length + b));
System.out.println(l);
我採取相應的指標在地圖上用符號和執行乘法和加法的操作最短。
例子。我有一條線eRNLpuGgnON。這些符號在Map
有這樣的價值觀:
e=2
R=29
N=50
....
的算法非常簡單:
0*64+2 = 2
2*64 + 29 = 157
157*64 + 50 = 10098
........
最後,我需要得到這個值:
2842528454463293618
,但我得到此值:
-1472624462
而且,如果line
的值足夠短,則一切正常。我無法理解爲什麼Long沒有正確的工作。
你的降價幅度不是[關聯](https://docs.oracle.com/javase/8/docs/api/java/util/stream/包summary.html#關聯性)。 – shmosel
@shmosel,我該如何解決它? –