前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >char转换为数字_char字符转int

char转换为数字_char字符转int

作者头像
全栈程序员站长
发布2022-11-10 16:27:58
发布2022-11-10 16:27:58
4.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

刷题遇到一个考点是 char型数字 转 int 进行计算的问题。一看就会,一做就错,显然是在这里的认识薄弱了。将一番搜索的结果记录下来,以备再忘来打脸。

char的定义参考:Java基本数据类型之char

首先,char 跟 int 这两种类型可以直接互转:

代码语言:javascript
代码运行次数:0
运行
复制
char ch1 = 'a';
int i = ch1;
char ch2 = (char)i;

那么面对 char in = ‘2’ 需要转成 int 做计算,那么很自然想到把char 型变量直接赋给 int 型就能计算 了。

代码语言:javascript
代码运行次数:0
运行
复制
char in = '2';
int iVar = in;
System.out.println(in);
System.out.println(iVar);

//输出:
// 2
// 50

想当然的做法果然错了:期望取出来的 int 2,实际却是 int 50。

当 char 直接 赋给 int 时,实际上是把 char 变量的ASCII 码赋给 int类型,因此取出char 变量的数值不能通过直接转换成int的方法实现。

方法一:

利用char变量使用 ASCII进行算术运算这一特征,可以得到一种间接计算获取数值的方法。

代码语言:javascript
代码运行次数:0
运行
复制
char ch1 = '8';
int iVar = ch1 - '0';
System.out.println(iVar);

//输出
// 8

‘0’-‘9’ ASCII 为 48-57,且顺序一致,因而char数字之间的差值等于数字之间的差值 。

代码语言:javascript
代码运行次数:0
运行
复制
System.out.println('9'-'1' == 9-1);	//true
System.out.println('8'-'0' == 8);	//true

方法二:

使用 char 包装类Character提供的方法;

代码语言:javascript
代码运行次数:0
运行
复制
char ch1 = '8';
Character.getNumericValue(ch1);    // 8
//Character.digit(ch1,10);    // 8

方法三:

通过int 包装类 Integer 。

代码语言:javascript
代码运行次数:0
运行
复制
char ch2 = '8';
int i = Integer.parseInt(String.valueOf(ch2));    // 8

方法一最快,方法三慢。测试代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
    @Test
	public void test(){
		int circle = 100000;
		StopWatch watch = new StopWatch();
		char ch1 = '8';
		watch.start("task1");
		int count = 0;
		while (count++ < circle){
			int i = ch1 - '0';
		}
		watch.stop();
		watch.start("task2");
		count = 0;
		while (count++ < circle){
			int i = Character.digit(ch1,10);
		}
		watch.stop();

		watch.start("task3");
		count = 0;
		while (count++ < circle){
			int i = Integer.parseInt(String.valueOf(ch1));
		}
		watch.stop();
		System.out.println(watch.prettyPrint());
	}



结果:
---------------------------------------------
ns         %     Task name
---------------------------------------------
002761400  010%  task1
003343100  012%  task2
022454000  079%  task3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月27日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档