1 问题描述

输入一个由数字组成的字符串,请把它转换成整数并输出。例如,输入字符串“123”,输出整数123。

请写出一个函数实现该功能,不能使用库函数。

2 解决方案

解答本问题的基本思路:从左至右扫描字符串中的每个字符,把之前扫描得到的数字乘以10,再加上当前字符表示的数字。

但是,基本思路是这样,还要注意以下几点:

(1)最好判断一下输入是否为空。

(2)如果字符串的第一个字符是‘-’号,最终得到的整数必为负整数。

(3)输入的字符串中不能含有不是数字的字符。

(4)输入的字符串不能太长,否则转换成整数后会导致整数溢出。

package com.liuzhen.string_1;

import java.util.Scanner;

public class StringToInt {
public static int Max_INT = Integer.MAX_VALUE;
public static int Min_INT = Integer.MIN_VALUE; public int getStringToInt(String A){
char[] arrayA = A.toCharArray();
int n = 0;
if(A.equals("") || A.equals(null)) //判断输入是否为空
return 0;
int i = 0;
while(arrayA[i] == ' ') //处理字符串首位的空格
i++;
int sign = 1; //用于判定输入字符串数字的正负,初始化为1表示为正数
if(arrayA[i] == '+' || arrayA[i] == '-'){
if(arrayA[i] == '-')
sign = -1;
i++;
}
while(i < arrayA.length && Character.isDigit(arrayA[i])){ //确定是数字0~9才执行循环
int c = arrayA[i] - '0';
//当输入字符串表示数为正数,且大于Max_INT
if(sign > 0 && (n > Max_INT/10 || (n == Max_INT/10 && c > Max_INT%10))){
n = Max_INT;
break;
}
//当输入字符串表示数为负数,且小于Min_INT
if(sign < 0 && (n + Min_INT/10 > 0 || (n + Min_INT/10 == 0 && c + Min_INT%10 > 0))){
n = Min_INT;
break;
}
//把之前得到的数字乘以10,再加上 当前字符表示的数字
n = n*10 + c;
i++;
} return sign > 0 ? n : -n;
}
public static void main(String[] args){
StringToInt test = new StringToInt();
Scanner in = new Scanner(System.in);
System.out.println("请输入一个由数字组成的字符串:");
String A = in.nextLine();
int result = test.getStringToInt(A);
System.out.println("整数result = "+result);
}
}

运行结果:

请输入一个由数字组成的字符串:
-1000
整数result = -1000 请输入一个由数字组成的字符串:
+100000
整数result = 100000 请输入一个由数字组成的字符串:
a1212
整数result = 0 请输入一个由数字组成的字符串:
整数result = 2147483647 请输入一个由数字组成的字符串:
-10000000000
整数result = -2147483648

最新文章

  1. jQuery瀑布流
  2. Selenium调用Chrome,Firefox,IE
  3. 【AT91SAM3S】串口UART初始化及收发数据
  4. CUBRID学习笔记 46 PREPARED set Do
  5. [Linux]学习笔记(1)
  6. bzoj1855: [Scoi2010]股票交易
  7. c# 字符串编码问题
  8. KJFrameForAndroid框架学习----高效设置网络图片
  9. QListWidget 去掉选中项
  10. 【3】JavaScript编程全解笔记(三)
  11. 12.21-Android WebService(基于KSOAP2)
  12. 2.Nginx日常维护技巧
  13. Python3 requests与http.cookiejar的使用(cookie的保存与加载)
  14. 洛谷 P2158 仪仗队
  15. yum提示Another app is currently holding the yum lock
  16. 【spring基础】AOP概念与动态代理详解
  17. PL/SQL学习笔记之变量、常量、字面量、字符串
  18. RabbitMQ----整理
  19. 重绘和回流(reflow和repaint)
  20. 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

热门文章

  1. 使用npoi导入Excel - 带合并单元格--附代码
  2. Centos 编译带调试信息的libevent
  3. Django :Content-Type组件
  4. 黑马程序员_毕向东_Java基础视频教程——if 语句(单条语句)(随笔)
  5. 转帖 支撑4.5亿活跃用户的WhatsApp架构概览
  6. percona 5.6的安装
  7. mysql+redis缓存策略常见的错误
  8. Oracle细粒度审计
  9. 判断对象oStringObject是否为String
  10. 前端ie7的兼容问题及解决方案(未完待续)