求数字字符串的整数值

Inhibitory 2011-01-09 02:33:06
求整数字符串的整数值,如 "124"的值: 124
...全文
603 89 打赏 收藏 转发到动态 举报
写回复
用AI写文章
89 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianpan000 2011-01-14
  • 打赏
  • 举报
回复
这样想是否可以?我就说一下思路。
先把这个字符串,一位一位的拆开,在循环中对应生成一个变量和变量值。这样就不会有数字的转换。
如下:看能不能运行。很久没有写java了。

public class test_toNum {
public int toNumber(String str){ //123
if("".equals(str) || str == null){
return -1;
}
char[] ch = str.toCharArray();
int re_num = 0;
for(int i = ch.length - 1 ; i >= 0 ; i --){
int number = 0 ;
switch(ch[i]){
case 48 : number = 0; break;
case 49 : number = 1; break;
case 50 : number = 2; break;
case 51 : number = 3; break;
case 52 : number = 4; break;
case 53 : number = 5; break;
case 54 : number = 6; break;
case 55 : number = 7; break;
case 56 : number = 8; break;
case 57 : number = 9; break;
/*
case A : number = A;
case B : number = B;
case C : number = C;
case D : number = D;
case E : number = E;
case F : number = F;*/
}
re_num += number * (Math.pow(10, ch.length - i - 1));
}
return re_num;
}
public static void main(String args[]){
int num = new test_toNum().toNumber("123");
System.out.println(num);
}
}
如果数据比较大可以将int -> long 。就到这吧。
soli11722984 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 inhibitory 的回复:]

引用 27 楼 wpffeihuwpf 的回复:

是我们想简单了,还是楼主想复杂了

是大家想复杂了,我只是想散分,*^o^*
[/Quote]

还好我一直滚轮子找LZ的贴,不用费眼力
YOULOVEXIA 2011-01-14
  • 打赏
  • 举报
回复
1,保证没有异常的话,可以直接parseInt
2,也可以一位位的解析,从第一个字符分析到最后一个,例如如果是8进制,要不停的乘以8
3,用正则判断也行,然后解析
猿敲月下码 2011-01-14
  • 打赏
  • 举报
回复
Integer.parseInt(i)
lijiananshen 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 shengxinchen 的回复:]
群众的力量是强大的,围观。。。。
[/Quote]顶
mtv0199 2011-01-13
  • 打赏
  • 举报
回复
public class Test {


public static List<Integer> convert(String s){
List<Integer> list = new ArrayList<Integer>();
int n = 0;
boolean lastEnd = false;
for(int i = 0;i < s.length();i++){
lastEnd = false;
n = n*10 + s.charAt(i) - 48;
if((i + 1) % 9 == 0){
list.add(new Integer(n));
n = 0;
lastEnd = true;
}
}
if(!lastEnd){
list.add(n);
}
int lastNumber = list.get(list.size() - 1);
int zeroNumber = s.length() % 9 -String.valueOf(lastNumber).length();
list.add(new Integer(zeroNumber));
return list;
}

/**
* @param args
*/
public static void main(String[] args) {

List<Integer> list = Test.convert("12344567896546");
for(int i = 0;i < list.size();i++){
System.out.print(l.get(i));
}
}
}


由于2^10近似为10^3,根据int的范围所以每次处理string的9位,虽然有点浪费空间但应该不会溢出,然后将每个int放入一个arraylist里面。
这样每9位做为一个处理单元,从最高位开始处理,有两个问题要注意:
1.如果第n个处理单元(n >= 2)起始为0,那么list的第n的元素计算时要补0,补0的数量为9 - String.valueof(list.get(n)).length();
例如:处理sting s = 1234567890012345678,第二个处理单元001234567转化为int时为1234567,此时当用这个list代表的大整数运算时,第二个单元前面补两个0;
2.对于最后一个int的处理,list倒数第二个元素放最后一个处理单元,此时有两种情况导致这个int不足9位,一是前面为0,二是本身就不够9位。解决的办法是在list的最后加入一个数,表示它需要补几位0,计算方法很简单,程序中写出来了。

可能有点麻烦,希望高手提出更好的方法。
jy_carl 2011-01-13
  • 打赏
  • 举报
回复
自己写一个parseInt,把字符串转下
24K純帥 2011-01-13
  • 打赏
  • 举报
回复
俺也果断接分,Integer.parseInt()
qybao 2011-01-13
  • 打赏
  • 举报
回复
接分
来个原始一点的,不考虑非法字符和整形溢出
int atoi(String s) {
int result = 0;
int base = 1;
char[] c = s.toCharArray();
for (int i=c.length-1; i>=0; i--) {
result += base*((int)(c[i]-'0'));
base *= 10;
}
return result;
}
ousyuryu 2011-01-13
  • 打赏
  • 举报
回复
搞复杂了吧
楼主的设题的前提是“整数字符串”
所以Integer.parseInt(整数字符串, 10).intValue();就可以了,有异常本来就不符合楼主的设题
吴国虎 2011-01-13
  • 打赏
  • 举报
回复
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
iambic 2011-01-13
  • 打赏
  • 举报
回复
Java有BigInteger,费这事干什么。
longq121 2011-01-13
  • 打赏
  • 举报
回复
哈哈,来接分,问题不错,一般用try catch Integer 正则倒是一个新的方法,谢过了!
0轰隆隆0 2011-01-13
  • 打赏
  • 举报
回复
那就等待你眼中的高手来解答对与错,或者你可以提供更高效的算法!
mtv0199 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 fulong258 的回复:]
鼻涕擦干净耍去~
[/Quote]
不知道的东西不代表不存在,学习c++、数据结构的时候都有大整数设计,需要设计一个数据结构表示几十甚至几百位的整数。c#,java也有大整数的封装类(java中是biginteger)。至于怎么读出来,有种东西叫科学计数法。
至于byte是按int压栈的你不知道没关系,哥今天教你了,再教你一个,boolean也是用int表示的。

ps:换马夹的话改一下取名的习惯,也要改改书写的习惯,大号后面每句话加"~"了,小号就加别加了,或者加”...“什么的。
coooliang 2011-01-13
  • 打赏
  • 举报
回复
如果楼主只穿三角的话 大家都会回答的

可是穿上星型的内裤 这个问题就变得复杂了!
  • 打赏
  • 举报
回复
很多加密算法用的都是byte,就是因为byte的高效性,“byte在栈里是用int处理的”在概念上都是错的~不要误导人家~
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 mtv0199 的回复:]
金融、政府机构会有很大的整数要处理的。几千万亿的美国国债只是九牛一毛...
[/Quote]

Long.MAX_VALUE=9223372036854775807
Float.MAX_VALUE=3.4028235E38
Double.MAX_VALUE=1.7976931348623157E308


9223372036854775807
这个数是几千万亿的多少倍?
还有这个数怎么念,谁能完整的念出来,要大写~
xiao_w_xiao 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 mtv0199 的回复:]
byte,char,short运算的时候拿到栈里都是用int的,写回去的时候才恢复原始的类型。拆分的方法也不难啊,基本思想就是一位一位的取,然后*10往下加。
[/Quote]

第一次听说,byte在栈里是用int处理的~

光说不练,拿出你的方法让大家都看看
mtv0199 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 69 楼 fulong258 的回复:]

在java中,BYTE是一个字节,字节也是JAVA中的数据类型中的最小单位,char是两个字节,STRING是char[]的封装类型。char和string是有编码的,byte是没有编码的,在处理速度上是最快的~

那你说是用BYTE拆分好呢,还是用char拆分好呢?

或者你能给出一个更高效的算法~
[/Quote]
byte,char,short运算的时候拿到栈里都是用int的,写回去的时候才恢复原始的类型。拆分的方法也不难啊,基本思想就是一位一位的取,然后*10往下加。
加载更多回复(55)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧