`
kingxianstar
  • 浏览: 19666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

不用系统函数将字符串转换成整型

阅读更多
昨天无意中浏览到Magic的博客,发现里面又很多的好东西,讲的是J2EE学习备忘录。里面有很多关于Java基础知识的文章,在算法这个篇章下有一篇是关于不用系统函数将字符串转化为数字,正好前几天的面试我遇到了这个问题,还有些问题没有搞明白,也知道自己的缺点是缺少动手巧代码。结合前几天研究的parseIn()方法的源代码,贴出来让大家看看。里面还有些问题,虽然可以处理各种进制的转换,但是却不能手动输入是多少进制,因为这里有涉及到字符串转数字的操作,希望大家能帮帮忙,看看还有什么更好的办法!
import java.util.*;
public class StringToInt{
	public static int StringToInt(String str,int radix){
		if(str==null){
			throw new NumberFormatException("null");
			}
	if (radix < Character.MIN_RADIX) {
     	throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX");
		}

	if (radix > Character.MAX_RADIX) {
    	 throw new NumberFormatException("radix " + radix + " greater than Character.MAX_RADIX");
    		 	}
		int result=0;//存放结果
		boolean negative=false;//标志是否为负数
		int start=0;//数字开始位置"+","-"
		int len=str.length();//字符串的长度
		int limitLeft;//边界值
		int digit;//当前字符表示的数字

		if(len>0){
			if(str.charAt(0)=='-'){//开始字符为负号
				negative=true;
				 limitLeft=Integer.MIN_VALUE;
				 start++;

			}
			else if(str.charAt(0)=='+'){//开始字符为正好
			   	negative=false;
				 limitLeft=-Integer.MAX_VALUE;
				 start++;

			}
			else{
				limitLeft=-Integer.MAX_VALUE;
				}

				if(start<len){
					digit=Character.digit(str.charAt(start++),radix);
       //对于给定的基数,如果是合法的字符(可以转化为数字),
       //返回该数字值,否则返回-1.比如digit('3',10)返回3,digit('a',10)返回-1.
					if(digit<0){
						throw new NumberFormatException("not number");
					}else{
						result=-digit;
					}

					}
		while(start<len){
			digit=Character.digit(str.charAt(start++),radix);
			if(digit<0){
			throw new 	 NumberFormatException("not number");
					}
		if(result<(limitLeft/radix)){
			throw new NumberFormatException("overflow");
						}
		    result*=radix;
		if(result<(limitLeft+digit)){
			throw new  NumberFormatException("overflow");
						}
			result-=digit;

					}

				}
		else{
			throw new NumberFormatException("exception");
			}
			if(negative){
				if(start>1)
					return result;
					else
					throw new  NumberFormatException("not number");
				}
				else{
					return -result;
					}

				}
		public static void main(String args[]){
			 while (true) {
           	 Scanner sc = new Scanner(System.in);
         	 String str = sc.next();
         	 int radix=16;
         	 try {
         	     System.out.println(StringToInt.StringToInt(str,radix));
         	 }
         	 catch (NumberFormatException e) {
          	    e.printStackTrace();
        	  }
			}
		}
}




运行结果:
1A
26
-1a
-26
+1d
29
bd
189
gfgh
java.lang.NumberFormatException: not number
at StringToInt.StringToInt(StringToInt.java:41)
at StringToInt.main(StringToInt.java:84)
分享到:
评论

相关推荐

    C语言常用数字和字符串转换函数

    C语言常用数字和字符串转换函数,toi 字符串转换成整型数 atol 字符串转换成长整型数 atof 字符串转换成浮点型数 strtol 字符串转换成长整型数 strtoul 字符串转换成无符号长整型数 strtod 字符串转换成浮点数

    c语言字符串_数字转换函数大全

    atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toascii(将整型数转换成合法的ASCII 码字符) ...

    字符串转整型

    其功能是将 s 中以字符串形式存放的非负整数,转换成相应整数返回。例如,如果s 中存放字符串 “1234”,则该函数的返回值就是 1234。假设s 中的字符全是数字,且不考虑s 是空串或s 太长的情况。

    C库函数(字符串转换篇)

    atoi 将字符串转换成整型数 atol 将字符串转换成长整型数 gcvt 将浮点型数转换为字符串,取四舍五入 strtod 将字符串转换成长整型数 strtol 将字符串转换成长整型数 strtoul 字符串转换成无符号长整型数 toascii ...

    strtoul函数的使用(将字符串转换成无符号长整型数)

    之前使用strtoul函数时,从来没思考过它的用法,最近在编写驱动设计时,突遇这个函数,发现这函数还是有值得探讨的地方。

    十进制整数和十六进制字符串转换

    十进制整数和十六进制字符串转换,文件仅包含两个函数。

    数字字符串转换整型数

    数字字符串转换型数或实型数,简单易懂,便于初学者

    Python 字符串转换为整形和浮点类型的方法

    Python2.6 之前:字符串转换为整形和浮点型 &gt;&gt;&gt;import string &gt;&gt;&gt;string.atoi('34.1') 34 &gt;&gt;&gt;string.atof(‘34.1') 34.1 python2.6之后:字符串转换为整形和浮点型 &gt;&gt;&gt;import string &gt;&gt;&gt;int('34.1') 34 &gt;&gt;&gt;float...

    PHP不使用内置函数实现字符串转整型的方法示例

    php字符串类型的数字如果想转成整型的数字,一般我们都是采用系统内置的API去做转换,但如果规定就不让我们去用系统内置的API转换,而是让自己去实现一个函数转换该怎么办?这里我们看下如何去实现。 系统内置 API ...

    c++将字符串转数字的实例方法

    C++字符串转化为数字的库函数 1、atoi 功 能:把一字符串转换为整数 用 法:int atoi(const char *nptr);...功 能:把一字符串转换为长整形 用 法:long atol(const char *nptr); 详细解释:atol()会扫描参数nptr字符

    C语言中一些将字符串转换为数字的函数小结

    C语言atoi()函数:将字符串转换成int(整数) 头文件: #include atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); 【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面...

    SQL Server中,在“整型数字”和“字符串表示的十六进制数字”之间进行转换的函数

    SQL Server中,在“整型数字”和“字符串表示的十六进制数字”之间进行转换的函数: IntToHex 数字转十六进制 HexToInt 十六进制转数字

    Linux C 函数参考.zip

    atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) gcvt(将浮点型数转换为字符串,取四舍五入) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型...

    字符串转换、天数到日期的转换函数组

    FOXPRO DBF中T类型的字段存储是一个整型的天数,本代码提供了一个从天数到日期的转换函数,为C/C++程序读取FOXPRO DBF中的T类型数据提供了方便。其他天数转日期的情况都可以参考此代码。

    C语言字符、字符串定义及相关函数

    C语言中字符和字符串的定义,及其相关的函数,包括复制,比较,转换成整形数等

    不用string.h库函数的,方便易用的字符串处理函数,减少库带来代码量

    //正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补'F'凑成偶数 int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength);//两两颠倒的字符串转换为正常顺序的字符串 int gsmEncode7bit...

    Python 十六进制整数与ASCii编码字符串相互转换方法

    在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题。查阅网上的资料后,均没有符合要求的,遂结合各家之长,用...

    C++检测字符串合法性的类(自创)

    同时允许把字符串转换成相应的数据类型, 可用于对用户输入字符串的检验和转换等。 该类允许指定检测哪些内容,如是否超过给定最大值、是否越界等等, 仅用字符串操作来检测,而不是用正则表达式,不过效率蛮高的。 ...

    日期字符串分解成年月日整型实现

    包括验证输入日期格式是否正确,判断输入日期是否正确,判断日期是否合法,类型转换函数等函数

    ASP字符串转换为整形、双精度型、布尔

    Rem 将字符串转换为整形数据 function toInteger(str,num) str=trim(str) if str=”” or not isnumeric(str) then toInteger=num else toInteger=clng(str) end if end function Rem 将字符串转换为双...

Global site tag (gtag.js) - Google Analytics