1. 程式人生 > >把一個字串轉換成int型別(Java實現)

把一個字串轉換成int型別(Java實現)

把一個字串轉換成int型別,比如“123”  --> 123

這道題目主要考查邊界情況及非法輸入的處理,c++跟Java處理起來不一樣,Java是不存在整數比Integer.MAX_VALUE還大的數,Java會將溢位的數自動進行處理成合法的值,負數也是同理,劍指offer49題用c++實現,直接比較了一下正數或負數跟最大正整數和最小負整數的值,Java這樣比較是不行的。參考Integer("123455")的構造方法,實現如下:

public class _49_StrToInt {//把一個字串轉換成int型別,比如“123”  --》 123
	
	public static boolean valid = false;
	public static boolean coreFlag=false;
	public static int strToInt(String num){
		if(num == null || num.length() == 0){
			valid = false;
			return 0;
		}
		int a = 0;
		if(num.charAt(0)=='+'){//
			a = core(num,'+');
		}else if(num.charAt(0) == '-'){
			a = core(num,'-');
		}else if(num.charAt(0) >= '0' && num.charAt(0)<='9'){
			a = core(num,'0');
		}else{
			valid = false;
			return 0;
		}
		if(coreFlag){
			valid = true;
			return a;
		}else{
			valid = false;
			return 0;
		}
	}
	
	public static int core(String num, char flag){
		int i=0;
		if(flag == '+' ){
			i = 1;
		}
		if(flag == '-'){
			i=1;
		}
		int a = 0;
		int temp =a;
		for(;i<num.length();i++){
			if(!(num.charAt(i) >='0' && num.charAt(i)<='9' )){
				coreFlag = false;
				return 0;
			}
			temp =a ;
			if(flag != '-'){
				a = a*10;
				a += (int)(num.charAt(i)-'0');
				if( temp > a){//若當前數小,說明溢位
					coreFlag = false;
					return 0;
				}
			}else {
				a = a*10;
				a -= (int)(num.charAt(i)-'0');/////負數直接相減,不用乘以-1
				if( temp < a){//負數應該越加越小,若當前數比之前數大,說明溢位
					coreFlag = false;
					return 0;
				}
			}//
		}
		
		coreFlag = true;
		return a;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = strToInt("-21474836"); //-2147483648 
		if(valid){
			System.out.println(a);
		}
	}
}

分別輸入最大最小值或者比其還大或還小的值,以及其他非法數字格式測試,輸出正確。

相關推薦

一個字串轉換int型別(Java實現)

把一個字串轉換成int型別,比如“123”  --> 123 這道題目主要考查邊界情況及非法輸入的處理,c++跟Java處理起來不一樣,Java是不存在整數比Integer.MAX_VALUE還

Integer.parseInt()方法將一個字串轉換int

學習Servlet的過程中request.getParameter();時其中的引數必須為String型別 但是在定義資料庫的實體類的時候為了判斷id是否為空,通常把id的型別賦值為Integer型別,在request域中獲取id屬性的時候會出現報錯 我解決的方法是把Str

json字串轉換指定型別(常用)

這裡使用的阿里的JSON類 指定pojo類返回你指定的型別 這裡返回的是User實體型別 JSON.parseObject("{key:value,key1:value2......}",User.c

實現一個函式,一個字串轉換整數

作者:翁鬆秀 劍指offer之“把一個字串轉換成整數” 很多人看到這麼簡單的面試題目,都是大筆一揮,立馬寫下洋洋灑灑函式: int StringToInt(char* string){ int num = 0; while(*str

劍指offer之將字串轉換整數(Java實現

將字串轉換成整數 NowCoder 題目描述: 將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。 輸入描述: 輸入一個

如何一個輸入字串轉換列舉型別

今天學習了列舉型別,記錄如下 列舉的作用 1)限制使用者不能隨意賦值,只能在定義列舉時列舉的值中選擇 2)無需記住每個值是什麼,只需要.選擇相應的值 注意: 定義列舉時,值不能是int型別 列舉型別的變數都可以強制轉換成一個int型別 列舉的值在定義是是有一個預設編號的,

java中char型別轉換int型別

PlanA: char ch = '9'; if (Character.isDigit(ch)){ // 判斷是否是數字 int num = Integer.parseInt(String.valueOf(ch)); System.out.println(num); }

JAVA關於二維數組裡面String型別轉換int型別用於計算問題

題目的意思是這樣,要求定義一個二維陣列,並儲存學生姓名和成績,以及求成績的綜合和最大值。。     我遇到的問題的是:如何將原本定義的字串的陣列儲存的成績,轉換成int型別二維陣列,並用於求和,最終效果如下圖: int a = Integer.parseInt(a

如何這種帶時區的字串轉換datetime型別

用DateTime.ParseExact轉換時像PDT這種時區名該怎麼表示呢 還有點就是聽我朋友的意思是他可以在女老總那說上話,讓我帶另一個人,我也很菜啊,這點我感覺這家公司就。 您的意思是不是說我現在要到做系統的企業裡去鍛鍊而不是去做沒有技術的小網站? 同意去,聽下來這家公

JS字串轉換Date型別

//把字串轉換成Date型別 function getDate(strDate){       var date = eval('new Date(' + strDate.replace(/\d+(?

eval 將一個字串轉換list

test='[{ "a": "1","b": "8"}, {"c": "2","d": "1"}, {"e": "5","f": "2"}]' test = eval(test) print(type(test)) for i in test: print(i) print(test)

將資料型別轉換字串,將字串轉換資料型別

方法1:採用靜態方法 int a = 123456789; String str = String.valueOf(a); 方法2:用包裝類轉換 float a=2.33f; String str=Float.toString(a); doubl

字串轉換整數(Java

題目:字串轉換為整數。 思路:將字串轉化為整數首先是遍歷字串中的每一個字元,有三種情況:首字元是正號,首字元是負號,首字元非正負號;然後遍歷每一個字元進行num = num * 10 + charAr

mysql中int型的數字怎麼轉換字串 以及字串轉換int

MySQL 數字型別轉換函式(concat/cast)。 1、將Int 轉為varchar經常用 concat函式,比如concat(8,’0′) 得到字串 ’80′。 2、將varchar 轉為Int 用 cast(a as signed) a為varchar型別的字串

Mysql中的varchar型別轉換int型別

Mysql中的varchar型別轉換成int型別 1.實戰案例 1.1 student表結構 mysql> desc student; +----------+-------------+----

js日期字串轉換時間戳

//獲取當前時間:   var myDate = new Date();//當前時間   var year = myDate.getFullYear();//當前年份   var month = myDate.getMonth() + 1;//當前月份   var day = myDate.getDate()

byte轉換int型別為啥要與(&)0xff?

舉個簡單的例子: byte[] b = new byte[5]; b[0] = -12; byte 8位二進位制 = 1個位元組 char 2個位元組 short (2個位元組) int(4個位元組) long(8個位元組) float (4個位元組) double(8個位元組)

《劍指offer》-將一個字串轉換一個整數,要求不能使用字串轉換整數的庫函式

/* * 將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 * 數值為0或者字串不是一個合法的數值則返回0 獲得123的方法:首先1*10+2=12,12*10+3=123 備註:字元'0'對應的ASCII碼值是48(轉化為int型別),而字元'9'對應的

PGSQL 將字串轉換double型別(to_number())

今天寫sql的時候,發現PG裡有一張表的面積欄位竟然設定成字串型別,這樣就不能統計使用sum函數了,所以需要將字串轉換成double型別再相加。 select sum(to_number(mj,9999.99)) as amountmj from tab