少年阿賓那些青春的歲月 |
//這里面主要是由于銀聯的手機支付用到了一個付款的轉換方式問題,當調用支付寶付款的時候,比如一分錢格式就是我們普通用的格式:0.01,而銀聯確要把格式轉化為000000000001(銀聯要求是12位)這種格式的,最后一位是分,然后向前依次是角,元,十元,百元,相信不用我說,你已經懂了吧。所以這里就需要一個轉換,為了應對像1000,1000.00,1000.0這種傳過來的格式的數據,特做一下轉換,然后傳給銀聯進行支付。
package com.abin.lee.collection.inner; public class ConsumeFinance { public static enum Currency{ CHINARMB("chinarmb"),DOLLAR("dollar"),HK("hk"); private Currency(String textVal){ this.textVal=textVal; } private String textVal; public String toString(){ return textVal; } } public static String ConsumeProcess(String money,Currency currency){ System.out.println("currentcy="+currency); String flag=null; if(currency.equals(Currency.CHINARMB)){ ConsumeFinance.ChinaProcess chinaProcess=new ConsumeFinance.ChinaProcess(); flag=chinaProcess.chinaChange(money, currency); } return flag; } public static String ConsumeProcessReturn(String money,Currency currency){ System.out.println("currentcy="+currency); String flag=null; if(currency.equals(Currency.CHINARMB)){ ConsumeFinance.ChinaReturn chinaReturn=new ConsumeFinance.ChinaReturn(); flag=chinaReturn.chinaReChange(money, currency); } return flag; } public static class ChinaProcess{ private static String status=null; public static String chinaChange(String money,Currency currency){ int point=money.lastIndexOf("."); if(point==-1){ StringBuffer stb=new StringBuffer(); int len=money.length(); int lon=10-len; for(int i=0;i<lon;i++){ stb.append("0"); } stb.append(money); stb.append("00"); status=stb.toString().intern(); } if(point>0){ int len=money.indexOf("."); int chn=money.length()-len-1; switch(chn){ //先判斷money格式為100.0這種格式的,小數點后面有一位小數點的情況 case 1: StringBuffer stb=new StringBuffer(money); stb.deleteCharAt(len); int lend=stb.length(); StringBuffer sb=new StringBuffer(); for(int i=0;i<12-lend;i++){ sb.append("0"); } sb.append(stb.toString()); status=sb.toString().intern(); //先判斷money格式為100.01這種格式的,小數點后面有兩位小數點的情況 case 2: money=money.replace(".", ""); int lende=money.length(); String connect=""; for(int i=0;i<12-lende;i++){ connect+="0"; } status=connect+money; } } return status; } } //把000000001001轉化為10.01這種格式 public static class ChinaReturn{ private static String status=null; public static String chinaReChange(String money,Currency currency){ int change=money.length(); int num=0; for(int i=0;i<change;i++){ int value=Integer.valueOf(String.valueOf(money.charAt(i))); if(value>0){ num=i; break; } } money=money.substring(num); if(num==10){ status="0."+money; } if(num==11){ status="0.0"+money; } if(num<10){ System.out.println(money.length()); StringBuffer stb=new StringBuffer(money); stb.insert(money.length()-2, "."); status=stb.toString().intern(); } return status; } } public static void main(String[] args) { Currency currency=Currency.CHINARMB; String money="000000001001"; String result=ConsumeProcessReturn(money, currency); // String result=ConsumeProcess(money, currency); System.out.println("result="+result); } } //ThreadLocal第一種用法: //建表: -- Create table create table USERBEAN ( ID NVARCHAR2(40) not null, USERNAME NVARCHAR2(40), PASSWORD NVARCHAR2(40) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate primary, unique and foreign key constraints alter table USERBEAN add constraint SSSID primary key (ID) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MyThreadLocal { //使用ThreadLocal保存Connection變量 public static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE"; private static final String USERNAME = "abing"; private static final String PWD = "abing"; public static Connection getConnection() { Connection connection = null; String url = ""; //如果connThreadLocal沒有本線程對應的Connection創建一個新的Connection,并將其保存到線程本地變量中。 if (threadLocal.get() == null) { try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); connection = DriverManager.getConnection(URL, USERNAME, PWD); threadLocal.set(connection); } catch (Exception e) { e.printStackTrace(); } }else { return threadLocal.get();//直接返回線程本地變量 } return connection; } public static void remove() { threadLocal.remove(); } } package com.abin.lee.collection.threadlocal; import java.io.Serializable; public class UserBean implements Serializable{ private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } //測試代碼 package com.abin.lee.collection.threadlocal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class OracleOperate { public static List<UserBean> findAll(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; String sql="select * from userbean order by id desc"; List<UserBean> list=new ArrayList<UserBean>(); UserBean user=null; try { conn=MyThreadLocal.getConnection(); ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while (rs.next()&&rs!=null) { user=new UserBean(); user.setId(rs.getString("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); list.add(user); } } catch (Exception e) { e.printStackTrace(); } return list; } public static void main(String[] args) { List<UserBean> list=findAll(); for(UserBean lst:list){ System.out.println("id="+lst.getId()); System.out.println("username="+lst.getUsername()); System.out.println("id="+lst.getPassword()); } } } //ThreadLocal第二種用法: package com.abin.lee.collection.threadlocal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MyThreadLocal { private static final String URL = "jdbc:oracle:thin:@localhost:1521:XE"; private static final String USERNAME = "abing"; private static final String PWD = "abing"; //使用ThreadLocal保存Connection變量 public static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(){ protected Connection initialValue() { Connection connection = null; //如果connThreadLocal沒有本線程對應的Connection創建一個新的Connection,并將其保存到線程本地變量中。 if (connection == null) { try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); connection = DriverManager.getConnection(URL, USERNAME, PWD); } catch (Exception e) { e.printStackTrace(); } } return connection; } }; public static Connection getConnection() { return threadLocal.get(); } public static void remove() { threadLocal.remove(); } } package com.abin.lee.collection.threadlocal; import java.io.Serializable; public class UserBean implements Serializable{ private String id; private String username; private String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } package com.abin.lee.collection.threadlocal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class OracleOperate { public static List<UserBean> findAll(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; String sql="select * from userbean order by id desc"; List<UserBean> list=new ArrayList<UserBean>(); UserBean user=null; try { conn=MyThreadLocal.getConnection(); ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while (rs.next()&&rs!=null) { user=new UserBean(); user.setId(rs.getString("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); list.add(user); } } catch (Exception e) { e.printStackTrace(); } return list; } public static void main(String[] args) { List<UserBean> list=findAll(); for(UserBean lst:list){ System.out.println("id="+lst.getId()); System.out.println("username="+lst.getUsername()); System.out.println("id="+lst.getPassword()); } } } package com.abin.lee.collection.volatiler; public class MyThread implements Runnable{ private volatile boolean flag=false; public void run() { while(!flag){ try { System.out.println("before"); Thread.sleep(3000); System.out.println("after"); } catch (Exception e) { e.printStackTrace(); } flag=true; } } public void setDone(boolean flag){ this.flag=flag; } } 測試代碼: package com.abin.lee.collection.volatiler; public class MyVolatileOne { public static void main(String[] args) { MyThread myThread=new MyThread(); Thread thread=new Thread(myThread); thread.start(); } }
package com.abin.lee.collection.singleton;
/** * 雙重檢查加鎖 單例模式 * @author abin * 這個單例模式寫法可以大大減少getInstance的時間消耗! */ public class SingletonOne { /** * volatile關鍵詞確保:當singleton變量被初始化成SingletonOne實例時,多個線程正確地處理singleton變量 */ private volatile static SingletonOne singleton=null; public SingletonOne(){} public static SingletonOne getInstance(){ if(null==singleton){//檢查實例,如果不存在就進入同步區塊 synchronized (SingletonOne.class) {//注意,只有第一次才徹底執行這里的代碼 if(null!=singleton){ singleton=new SingletonOne(); } } } return singleton; } } package com.abin.lee.collection.singleton; public class SingletonTwo { private SingletonTwo() { public static SingletonTwo getInstance() { <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="text/javascript"> function checkAll() { var m = document.getElementsByName("all")[0]; var s = document.getElementsByName("check"); if (m.checked) { for ( var i = 0; i < s.length; i++) { s[i].checked = true; } } else { for ( var i = 0; i < s.length; i++) { s[i].checked = false; } } } function checkEvery() { var m = document.getElementsByName("all")[0]; var s = document.getElementsByName("check"); for ( var i = 0; i < s.length; i++) { if (s[i].checked&&m.checked) { m.checked = true; } else { m.checked = false; } } } function turn() { with (document) { var m = getElementById("change"); var n = getElementById("table"); if (m.value == "收縮") { n.style.display = "none"; m.value = "展開"; } else { n.style.display = "block"; m.value = "收縮"; } } } </script> </head> <body> <table border="1" align="center" width="60%" id="table1"> <tr> <td><input type="checkbox" name="all" onclick="checkAll();">全選</td> <td><input type="button" value="收縮" id="change" onclick="turn();"></td> </tr> </table> <% int number = Integer.parseInt(request.getParameter("number")); %> <table border="1" align="center" width="60%" id="table"> <% for (int i = 0; i < number; i++) { %> <tr> <td><input type="checkbox" name="check" onclick="checkEvery()"></td> <td><%=i%></td> </tr> <% } %> </table> </body> </html> <!-- 獲取復選框的值--> <input type="checkbox" name="aaa" value="1" />1 package com.abin.lee.dom4j; import java.util.HashMap; import org.dom4j.Document; public class CreateDom4j { } <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<html> <script> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<html> <script> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<html> <script> colname.innerHTML = document.getElementById("name1").value; |