从整数索引获取字母

时间:2018-01-24 11:20:47

标签: java string

我希望有一个java方法,给我索引,给出相应的字母集excel,所以:

258 => IZ(最后一个指数)

30 => AD

120 => DR

56 => BD

第一种方法给出正确的输出,但它非常愚蠢,我不喜欢它。 我试图建立一个涉及一些思考的第二种方法。 我已经看过使用String Builder的方法或其他类似this one的方法 但我试图建立一个方法,我自己也叫 betterGetColumnName

更好258 => IHGFEDCBAX(不行)

更好30 => AD(好的,第二个字母表可以了)

更好120 => DCBAP(不行)

更好56 =>坏(看起来像第三个字母圆形打破了我的逻辑)

ob_start();

我想我应该保存多少次我完整的字母表,我不会使用public String getColumnName(int index){ String[] letters = { "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R", "S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG","AH", "AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV", "AW","AX","AY","AZ","BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ", "BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX", "BY","BZ","CA","CB","CC","CD","CE","CG","CH","CI","CJ","CK","CL","CM", "CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ","DA", "DB","DC","DD","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP", "DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ","EA","EB","EC","ED", "EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER", "ES","ET","EU","EV","EW","EX","EY","EZ","FA","FB","FC","FD","FE","FF", "FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT", "FU","FV","FW","FX","FY","FZ","GA","GB","GC","GD","GE","GF","GG","GH", "GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV", "GW","GX","GY","GZ","HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ", "HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX", "HY","HZ","IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL", "IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV","IW","IX","IY","IZ" }; if (index<=letters.length){ return letters[index-1]; }else{ return null; } } 或者只是StringBuildercharString因为在学校我们无法升级java版本(1.5.x)我也认为理解为什么我的逻辑错误可能对我有用。

integers

1 个答案:

答案 0 :(得分:8)

你肯定是在正确的轨道上,虽然你的逻辑有点偏。你有效地尝试做的是将基数10整数转换为基数26的字符。但不是数字,而是转换的&#34;数字&#34;实际上由26个字母组成。

你想要的算法是通过将输入数字的余数除以26来确定输出的每个字母。然后,将输入除以26并再次检查&#34;数字&#34;看看它是什么字母的位置。在下面的代码段中,我假设1对应Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], : argument is of length zero ,26对应A,27对应Z。你可以根据自己认为最好的方式改变指数。

AA

Demo

注意:建议使用int input = 53; String output = ""; while (input > 0) { int num = (input - 1) % 26; char letter = (char)(num+65); output = letter + output; input = (input-1) / 26; } System.out.println(output); BA 代替StringBuilder进行有用的编辑来进行连接。虽然这可能比上面的代码更优化,但它可能会使查看算法变得更加困难。