`
kingxianstar
  • 浏览: 20184 次
  • 性别: 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++程序。该程序通过一个名为`strToint`的函数实现,它能够处理带有正负号的数字,并且能够识别非数字字符,避免将这些...

    字符串,整型数据,字符型数组互相转换源码

    在C++中,可以使用`std::stoi()`函数将字符串转换为整型。例如: ```cpp #include #include int main() { std::string str = "123"; int num = std::stoi(str); std::cout 转换后的整型数值为:" ; return 0;...

    使用str2num、str2double、str2int等函数来实现字符串转换为数字类型的功能

    str2int 函数是将字符串转换为整型数字的函数。该函数可以将字符串转换为整型数字,通常用于整数计算和处理中。例如: ```matlab str = '123'; num = str2int(str); % 将字符串转换为整型数字 123 ``` 在实际应用中...

    将字符串转换成日期

    在C++编程中,处理日期和时间通常涉及到各种数据类型和函数,其中包括将字符串转换为日期对象。在这个场景中,我们需要将字符串型的日期转换为`CTime`类型。`CTime`是C++标准库中的一个类,它用于表示日期和时间。...

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

    strtoul函数是C语言标准库中的一个函数,用于将字符串转换为无符号长整型数(unsigned long)。这个函数在进行数值计算、数据处理、驱动开发等场景下非常有用。它的作用是分析字符串中的数字和字符,然后根据指定的...

    javascript字符型转换成整型

    `parseInt()` 是JavaScript中最常用的一种将字符串转换为整数的方法之一。它的基本语法如下: ```javascript parseInt(string, radix); ``` - **string**:需要被转换的字符串。 - **radix**:可选参数,表示解析...

    Linux常用C函数—字符串转换篇.doc

    在Linux系统中,C语言提供了多个用于字符串转换的函数,这些函数可以帮助我们把字符串形式的数据转换成对应的数值类型,或者反之。本篇文章主要介绍了几个常见的字符串转换函数,包括`atof`、`atoi`、`atol`以及`...

    c语言字符串与数字转换函数

    2. atoi() 函数:将字符串转换成整型数 atoi() 函数的定义在stdlib.h头文件中,函数原型为:int atoi(const char *nptr); atoi() 函数会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始...

    字符串转整型

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

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

    5. **strtol**:此函数用于将字符串转换成长整型数,可以指定基数(2-36),允许用户控制转换的基数,比如二进制、八进制、十六进制等。它返回一个长整型数,并提供指针指向未转换的字符串剩余部分。 6. **strtoul*...

    字符串转换为对应数

    `strtol`函数用于将字符串转换为长整型数(long integer)。其原型如下: ```c long int strtol(const char *nptr, char **endptr, int base); ``` - **参数说明**: - `nptr`:指向待转换的字符串的指针。 - `...

    十六进制与字符串转换

    - 使用`strtol()`:可以将字符串转换为长整型数值,配合`base`参数(设为16)实现从十六进制字符串到整数的转换。 - 自定义函数:可以编写自定义函数,通过遍历字符串并逐字符转换来完成字符串到十六进制数值的...

    在vc中如何进行类型转换,比如把整型转换为字符串型或从字符串转换为整型1.pdf

    - 使用atof()函数:atof()函数用于将字符串转换为双精度浮点型(double)。 - 使用CComBSTR和BSTR:BSTR是COM中的一个宽字符字符串类型,_bstr_t是一个辅助类,用于对BSTR进行封装。例如,CComBSTR bstrVar("test"); ...

    在vc中如何进行类型转换比如把整型转换为字符串型或从字符串转换为整型教材.pdf

    `itoa`函数将整型转换为字符串,`atoi`将字符串转换为整型,`atol`将字符串转换为长整型,而`atof`则是将字符串转换为双精度浮点型。这些函数在使用时需要包含相应的头文件,并要注意其返回类型。 转换为字符串型的...

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

    - **功能描述**: `atoi` 函数用于将一个字符串转换成整型数。它的行为类似于 `atof`,但最终返回的是整数值。 - **返回值**: 返回转换后的整数。 - **示例代码**: ```c #include #include int main() { ...

    Linux下常用函数-字符串函数

    - **功能**: 该函数用于将字符串转换为带基数的长整型数值。 - **参数**: - `nptr`: 指向字符串的指针。 - `endptr`: 指向已解析部分结束位置的指针。 - `base`: 基数(进制),如2、8、10、16等。 - **返回值**:...

    C语言字符串操作函数.docx

    - **功能**:`strtoul()` 函数用于将字符串转换为无符号长整型数。 - **语法**: ```c unsigned long strtoul(const char *str, char **endptr, int base); ``` - **参数**: - `str`: 字符串。 - `endptr`: ...

    整形和字符串的各种转换

    同样,我们可以使用Integer.valueOf()方法将字符串转换为整形。例如: ```java String str = "10"; int i = Integer.valueOf(str).intValue(); ``` 这样,我们就将字符串str转换为了整形i。 字符串到字符数组的转换...

Global site tag (gtag.js) - Google Analytics