昨天无意中浏览到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语言常用数字和字符串转换函数,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;...
str2int 函数是将字符串转换为整型数字的函数。该函数可以将字符串转换为整型数字,通常用于整数计算和处理中。例如: ```matlab str = '123'; num = str2int(str); % 将字符串转换为整型数字 123 ``` 在实际应用中...
在C++编程中,处理日期和时间通常涉及到各种数据类型和函数,其中包括将字符串转换为日期对象。在这个场景中,我们需要将字符串型的日期转换为`CTime`类型。`CTime`是C++标准库中的一个类,它用于表示日期和时间。...
strtoul函数是C语言标准库中的一个函数,用于将字符串转换为无符号长整型数(unsigned long)。这个函数在进行数值计算、数据处理、驱动开发等场景下非常有用。它的作用是分析字符串中的数字和字符,然后根据指定的...
`parseInt()` 是JavaScript中最常用的一种将字符串转换为整数的方法之一。它的基本语法如下: ```javascript parseInt(string, radix); ``` - **string**:需要被转换的字符串。 - **radix**:可选参数,表示解析...
在Linux系统中,C语言提供了多个用于字符串转换的函数,这些函数可以帮助我们把字符串形式的数据转换成对应的数值类型,或者反之。本篇文章主要介绍了几个常见的字符串转换函数,包括`atof`、`atoi`、`atol`以及`...
2. atoi() 函数:将字符串转换成整型数 atoi() 函数的定义在stdlib.h头文件中,函数原型为:int atoi(const char *nptr); atoi() 函数会扫描参数 nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始...
其功能是将 s 中以字符串形式存放的非负整数,转换成相应整数返回。例如,如果s 中存放字符串 “1234”,则该函数的返回值就是 1234。假设s 中的字符全是数字,且不考虑s 是空串或s 太长的情况。
5. **strtol**:此函数用于将字符串转换成长整型数,可以指定基数(2-36),允许用户控制转换的基数,比如二进制、八进制、十六进制等。它返回一个长整型数,并提供指针指向未转换的字符串剩余部分。 6. **strtoul*...
`strtol`函数用于将字符串转换为长整型数(long integer)。其原型如下: ```c long int strtol(const char *nptr, char **endptr, int base); ``` - **参数说明**: - `nptr`:指向待转换的字符串的指针。 - `...
- 使用`strtol()`:可以将字符串转换为长整型数值,配合`base`参数(设为16)实现从十六进制字符串到整数的转换。 - 自定义函数:可以编写自定义函数,通过遍历字符串并逐字符转换来完成字符串到十六进制数值的...
- 使用atof()函数:atof()函数用于将字符串转换为双精度浮点型(double)。 - 使用CComBSTR和BSTR:BSTR是COM中的一个宽字符字符串类型,_bstr_t是一个辅助类,用于对BSTR进行封装。例如,CComBSTR bstrVar("test"); ...
`itoa`函数将整型转换为字符串,`atoi`将字符串转换为整型,`atol`将字符串转换为长整型,而`atof`则是将字符串转换为双精度浮点型。这些函数在使用时需要包含相应的头文件,并要注意其返回类型。 转换为字符串型的...
- **功能描述**: `atoi` 函数用于将一个字符串转换成整型数。它的行为类似于 `atof`,但最终返回的是整数值。 - **返回值**: 返回转换后的整数。 - **示例代码**: ```c #include #include int main() { ...
- **功能**: 该函数用于将字符串转换为带基数的长整型数值。 - **参数**: - `nptr`: 指向字符串的指针。 - `endptr`: 指向已解析部分结束位置的指针。 - `base`: 基数(进制),如2、8、10、16等。 - **返回值**:...
- **功能**:`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。 字符串到字符数组的转换...