java stoi
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的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- PAT 乙级 1019.数字黑洞 C++/Java
题目来源 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有 ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
随机推荐
- BZOJ 4555 [Tjoi2016&Heoi2016]求和 ——分治 NTT 多项式求逆
不想多说了,看网上的题解吧,我大概说下思路. 首先考察Stirling的意义,然后求出递推式,变成卷积的形式. 然后发现贡献是一定的,我们可以分治+NTT. 也可以直接求逆(我不会啊啊啊啊啊) #in ...
- C#中DataTable中Rows.Add 和 ImportRow 对比
最近参加项目中,数据操作基本都是用DataTable的操作,老代码中有些地方用到DataTable.Rows.Add又有些代码用的DataTable.ImportRow,于是就对比了一下 VS查询说明 ...
- hdu 1250 树形DP
Anniversary party Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- Linux 设备驱动的固件加载【转】
转自:http://blog.csdn.net/zqixiao_09/article/details/51106663 版权声明:本文为博主原创文章,未经博主允许不得转载. 作为一个驱动作者, 你可能 ...
- Button Style Status
<Window x:Class="Dxsl.WPF.APP.Views.StyleTest2" xmlns="http://schemas.microsoft.co ...
- PHP使用JpGraph绘制折线图
PHP使用JpGraph绘制折线图 下载jpgraph类库,使用的是src目录下的类文件. require_once './src/jpgraph.php'; require_once './src/ ...
- PHP基础知识练习
1 . PHP 指的是?(C ) A.Private Home Page B.Personal Hypertext Processor C.PHP: Hypertext Preprocessor D. ...
- LeetCode OJ——Subsets
http://oj.leetcode.com/problems/subsets/ 计算一个集合的子集,使用vector<vector<int> >,使用了进制的思想. #inc ...
- Codeforces Gym101572 J.Judging Moose (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))
Problem J Judging Moose 这个题是这里面最简单的一个题... 代码: 1 //J 2 #include <stdio.h> 3 #include <math. ...
- 利用adb截屏
一 第一种方式 二 第二种方式