package string.string1_4;

 import java.util.Scanner;

 public class StrToInt
{
/**
* 将str转换为int整数
* 1. 处理输入为空
* 2. 处理输入有非法字符
* 3. 处理溢出
* 4. 处理开头的空格
*/
public static int stoi(String str)
{
if(str == null || str.equals(""))
return 0 ;
int i = 0;
while (str.charAt(i) == ' ')
i++ ; boolean isPositive = true ; if(!check(str.charAt(i)))
{
//检查整数开始的第一个字符是否为-或+, 如果结果为false则说明输入非法
if(str.charAt(i) != '-' && str.charAt(i) != '+')
return 0 ;
if(str.charAt(i) == '-')
isPositive = false ;
i++ ;
} int theNumber = 0 ; for( ; i<str.length() ; i++)
{
char ch = str.charAt(i) ;
int x = ch-48 ;
if(!check(ch)) //检查合法性
return 0 ;
boolean overflow = false ;
//比较当前数字是否和max/10, 大于说明溢出, 如果等于, 那么就比较x和max%10的余数,如果大于, 说明溢出
if(isPositive && (theNumber > Integer.MAX_VALUE/10 || (theNumber == Integer.MAX_VALUE/10 && x >= Integer.MAX_VALUE%10)))
overflow = true ;
//由于java没有unsigned类型, 因此只能将当前数字转换为负数进行等价比较
else if(-theNumber < (Integer.MIN_VALUE)/10 || (-theNumber == Integer.MIN_VALUE/10 && -x <= Integer.MIN_VALUE%10))
overflow = true ;
if(overflow)
return isPositive ? Integer.MAX_VALUE : Integer.MIN_VALUE ;
else
theNumber = theNumber*10 + x ;
} return isPositive ? theNumber : -theNumber ;
} /**
* 检查是否是合法字符, 合法字符仅包括0-9
*/
private static boolean check(char ch)
{
if(ch>=48 && ch <=57)
return true ;
return false ;
} public static void main(String[] args) {
Scanner sc = new Scanner(System.in) ; while (true)
{
String line = sc.nextLine() ;
int x = stoi(line) ; System.out.println(x);
}
}
}

java stoi的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. PAT 乙级 1019.数字黑洞 C++/Java

    题目来源 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有 ...

  3. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  4. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  5. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  6. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  7. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  8. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  9. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

随机推荐

  1. ACM程序设计选修课——1044: (ds:队列)打印队列(queue模拟)

    问题 A: (ds:队列)打印队列 时间限制: 1 Sec  内存限制: 128 MB 提交: 25  解决: 4 [提交][状态][讨论版] 题目描述 网络工程实验室只有一台打印机,它承担了非常繁重 ...

  2. HDU-1529 Cashier Employment

    据网上说这是到差分约束四星题... 可我觉得难吗? 比推DP方程容易... 两种约束方式,当然实现到程序就变成六种了... #include <cstdio> #include <c ...

  3. 《常见问题集》Eclipse

    1.javax.servlet.http.HttpServlet找不到 [解决方法] 选择Build Path>Configure Build Path... Add Library... 在出 ...

  4. 多态Poly中的向上/下转型 Upcast/Downcast

    [参考资料]马克-to-win java中多态polymorphism,向上转型和动态方法调度有什么用? java中什么叫多态,动态方法调度(dynamic method dispatch)? jav ...

  5. Java面试题之继承、组合、聚合有什么区别

    继承:他是is-a的关系,指一个类继承另外一个类的功能 例如:public class A extends B { } 聚合:他是has-a 例如:public class A{ List<B& ...

  6. cf671B Robin Hood

    We all know the impressive story of Robin Hood. Robin Hood uses his archery skills and his wits to s ...

  7. spring中MessageSource的配置使用方法2--ReloadableResourceBundleMessageSource

    如何在spring mvc框架中实现MessageSource来管理国际资源文件呢 如下: 1.在applicationContext.xml文件内配置如下 <span style=" ...

  8. 巧克力(zoj 1363)

    2100年,ACM牌巧克力将风靡全球. “绿的,橘红的,棕色的,红的…”,彩色的糖衣可能是ACM巧克力最吸引人的地方.你一共见过多少种颜色?现在,据说ACM公司从一个24种颜色的调色板中选择颜色来装饰 ...

  9. react-dnd 拖拽

    介绍 React DnD 是一组 React 高阶组件,可以用来帮你构建复杂的拖拽接口,同时解耦你的组件.React DnD 非常适合像 Trello 和 Storify 这样的应用,在不同地方通过拖 ...

  10. iOS应用内跳转百度高德苹果地图

    移动开发经常用到基于位置的一些导航功能,但是对于对导航功能依赖性不强的的应用,我们直接采用应用外跳转地图APP即可. 但是应用间跳转,首先需要设置白名单, 在iOS 9 下涉及到平台客户端跳转,系统会 ...