標籤:開發 數字格式化 exception 加密解密 環境 工作 負數 比較 view
小編雖然是學java出生,但工作之後就一直從事android開發,很多java基礎都忘記完了,最近一年從ES換到了AS,原來的很多習慣都收到了挑戰,比如我喜歡ES寫方法的時候先在JAVA project中寫個main方法驗證下對不對,比如資料拆分,時間對比等等,但AS使用中,因為和ES很多環境變數衝突,就把ES卸載了,現在很多都不方便。
在開發中使用比較多的就是設定view的值/給view填儲值得時候,需要格式化資料,小編今天用了一寫時間,做了下小小的整理
1.%s 字串類型用處:多用於字串拼接
樣本:
String str = String.format("拼接字元,%s", "dddd"); Logs.e("fuqinming", str); str = String.format("拼接字元,%s", 1); Logs.e("fuqinming", str); str = String.format("拼接字元,%s", true); Logs.e("fuqinming", str);
下面為各種傳實值型別以及得到的值:
06-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,dddd06-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,106-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,true
結果小結:
該預留位置不規定後面的傳實值型別,都會變成string類型,類似
String str=“拼接字元,”+傳入值
2.%c 字元類型
String str = String.format("拼接字元,%c", ‘A‘);Logs.e("fuqinming", str); str = String.format("拼接字元,%c", "d");Logs.e("fuqinming", str);str = String.format("拼接字元,%c", 1);Logs.e("fuqinming", str);str = String.format("拼接字元,%c", true);Logs.e("fuqinming", str);
下面為得到的結果:
06-15 11:31:00.502 2038-2038/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,A報錯報錯報錯報錯
3.%b布爾類型用處:可用於android中直接打出一個判斷是否正確
樣本:
String str = String.format("對比結果為:%b", 1+1!=2);Logs.e("fuqinming", str);str = String.format("拼接字元,%b", "d".equals("A"));Logs.e("fuqinming", str);str = String.format("拼接字元,%b", 1);Logs.e("fuqinming", str);str = String.format("拼接字元,%b", !true);Logs.e("fuqinming", str);
結果:
fuqinming對比結果為:falsefuqinming拼接字元,falsefuqinming拼接字元,truefuqinming拼接字元,false
結果小結:
String.format(“其他拼接字元%b”,判斷語句/其他);如果傳值不是判斷語句那麼得到的值,預設為true
4.%d整數類型(十進位)
用處:已經忘記什麼是十進位數,也忘記怎麼算進位數了,不過依稀記得十進位數就是我們平常看到的數,比如100就是100這樣,在android中可用來擷取計算得到的int值
樣本:
String str = String.format("拼接字元,%d", 1);Logs.e("fuqinming", str);str = String.format("拼接字元,%d", 1 / 2);Logs.e("fuqinming", str);str = String.format("對比結果為:%d", 1 + 1 != 2);Logs.e("fuqinming", str);str = String.format("拼接字元,%d", "d".equals("A"));Logs.e("fuqinming", str);
得到的結果:
6-15 11:50:37.190 15215-15215/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,106-15 11:50:37.190 15215-15215/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字元,0報錯報錯
結果小結:String.fromat(“拼接字串%d”,計算),傳入的值可以為int,double,lang,float等值,得到的是int,0.60為0,並不是四捨五入
前沿:前面四點是本人早上寫的,晚上回來補充的時候,發現自己的es雖然android環境不行,但是寫java代碼還是可以的,顧本人下面的代碼片來自於es的java project
5.%x整數類型(十六進位)使用:特殊計算
樣本:
public static void main(String[] args) { String str=String.format("%x",100); System.out.println(str); str=String.format("%x",100/2); System.out.println(str);// str=String.format("%x",101.f);// System.out.println(str);// str=String.format("%x",1000.00); System.out.println(str); str=String.format("%x",true); System.out.println(str); }
樣本結果:
643232Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:11)
結果小結:
以用於做特殊運算,但是傳參必須是int類型,其他類型會直接報錯,在android開發中,很少會遇到這種特殊運算,顧運用價值並不`大
6.%o整數類型(八位元)使用:特殊計算,認為在android中使用意義不大
樣本:
public class dd { public static void main(String[] args) { String str=String.format("%o",100); System.out.println(str); str=String.format("%o",100/2); System.out.println(str); str=String.format("%o",1000.00); System.out.println(str); str=String.format("%o",true); System.out.println(str); }}
樣本結果:
4462Exception in thread "main" java.util.IllegalFormatConversionException: o != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7)
結果小結:
tring.format(“%o”,值),值的類型必須是int,如果不是int就會直接報錯,該方法比較適合特殊運算,但是android中特殊運算很少,並不使用於android運用。。
6.%f浮點類型使用:多用于格式化資料,android中也常常使用
java樣本
public static void main(String[] args) { String str=String.format("%.2f",100.00); System.out.println(str); str=String.format("%f",100.00); System.out.println(str); str=String.format("%.8f",1000.00); System.out.println(str); str=String.format("%f",true); System.out.println(str); }
樣本結果:
100.00100.0000001000.00000000Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:9)
結果小結:
String.format("%f",值),需要注意的是值必須為浮點類型,否則會報錯,其中在測試中,發現了如下結果1>當不設定保留小數點後位元的時候,預設會保留6位小數2>當設定保留小數點後位元超過最大位元的時候,會直接報錯,提示超出記憶體錯誤
7.%a十六進位浮點類型使用:特殊運算,在android中基本上沒什麼用
樣本:
public static void main(String[] args) { String str=String.format("%a",1000.00); System.out.println(str); str=String.format("%a",1000.f); System.out.println(str); str=String.format("%a",1000); System.out.println(str); }
樣本結果:
x1.f4p90x1.f4p9Exception in thread "main" java.util.IllegalFormatConversionException: a != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7)
結果小結:
String.format(“%a”,number),傳值可以是int也可以是浮點類型,但也只能是number相互關聯類型,否則就會報錯,在android中不適用。
8.%e指數類型使用:在做金融類APP開發中可能會有用
樣本:
public static void main(String[] args) { String str=String.format("%e",1000.00); System.out.println(str); str=String.format("%e",1000.f); System.out.println(str); str=String.format("%e",1000); System.out.println(str); str=String.format("%e","ddd"); System.out.println(str); }
結果:
1.000000e+031.000000e+03Exception in thread "main" java.util.IllegalFormatConversionException: e != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7)
結果小結:
String.format(“%e”,浮點類型),其中傳值必須是浮點類型,否則會報錯
9.%g通用浮點類型(f和e中較短的)使用:特殊計算
樣本:
public static void main(String[] args) { String str=String.format("%g",10002121212.0025); System.out.println(str); str=String.format("%g",1000.f); System.out.println(str); str=String.format("%g",1000); System.out.println(str); str=String.format("%g","ddd"); System.out.println(str); }
樣本結果
1.00021e+101000.00Exception in thread "main" java.util.IllegalFormatConversionException: g != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7)
結果小結:String.format(“%g”,浮點類型),傳實值型別一定要是浮點類型,並且在實際運算中,一定要控制長度,否則就會得到資料異常,在android view擷取值的時候報錯
10.%h散列碼 使用:多在密碼編譯演算法中使用
樣本:
public static void main(String[] args) { String str=String.format(“%h”,10002121212.0025); System.out.println(str); str=String.format(“%h”,1000.f); System.out.println(str); str=String.format(“%h”,1000); System.out.println(str); str=String.format(“%h”,”ddd”); System.out.println(str); str=String.format(“%h”,true); System.out.println(str); str=String.format(“%h”,false); System.out.println(str); }
結果:
e27d 447a0000 3e8 183e4 4cf 4d5
結果小結:
String.format(“%h”,值),任何實值型別都會有散列碼,顧傳值可以是任何值,在android中可以用於自己寫加密解密方法,比如我們自己寫的加密鍵盤
11.%%百分比類型使用:格式化數
樣本:
public static void main(String[] args) { String str=String.format("%%",10002121212.0025); System.out.println(str); str=String.format("%%",1000.f); System.out.println(str); str=String.format("%%",1000); System.out.println(str); str=String.format("%%","ddd"); System.out.println(str); str=String.format("%%",true); System.out.println(str); str=String.format("%d%%",1); System.out.println(str); str=String.format("%.2f%%",100.3); System.out.println(str); }
結果:
%%%%1%100.30%
結果小結:
%%多用於混用,與其說預留位置,還不如更加確切的說是%%就是%號,android中部分格式化的時候可以使用
12.+為正數或者負數添加符使用:多用於數字格式化
樣本:
public static void main(String[] args) {String str=String.format("%+d",1000);System.out.println(str);str=String.format("%+d",-100);System.out.println(str);str=String.format("%+.2f",1000.12);System.out.println(str);str=String.format("%+.2f",-1000.12);System.out.println(str);}
結果:
1000-100+1000.12-1000.12
結果小結:多用於混用,是不是發比寫很多if 方便很多呢
13.小例子格式化錢
int 轉換為,三位,三位,三位這樣的數字 String str=String.format("%,d",1000);System.out.println(str);
結果
1,000
含有浮點類型的數字轉換
public void main(String[] args) { String str=String.format("%,.2f",1000.00); System.out.println(str); }
得到的結果:
1,000.00
以上知識雖然特別基礎,但也算是比較實用的,一般在android中我們都會寫的又臭又長,上面的java的格式化方法可是很使用的偶,希望上面的分享對你有用偶。
Android之使用JAVA預留位置格式資料(很實用)