關于全角轉半角的問題,在Unicode中,標點、數字、字母的半角編碼最高位均為0,它們的全角編碼與半角編碼的第三位相差32h。
public class Test
{
?public static void main(String [] args)
?{
? String QJstr="HELLO";
? String QJstr1="HELLO";
????
???? String result=BQchange(QJstr);
???? String result1=QBchange(QJstr1);
???
????? System.out.println(QJstr+"\n"+result);
????? System.out.println(QJstr1+"\n"+result1);
?}
//半角轉全角
? public static final String BQchange(String QJstr)
? {
????? String outStr="";
???? String Tstr="";
???? byte[] b=null;
????? for(int i=0;i<QJstr.length();i++)
????? {????
??????? try
??????? {
????????? Tstr=QJstr.substring(i,i+1);
????????? b=Tstr.getBytes("unicode");
??????? }
??????? catch(java.io.UnsupportedEncodingException e)
??????? {
????????? e.printStackTrace();
??????? }????
??
?????? if (b[3] !=-1)
?????? {
???????? b[2]=(byte)(b[2]-32);
???????? b[3]=-1;
???????? try
???????? {??????
?????????? outStr=outStr+new String(b,"unicode");
???????? }
???????? catch(java.io.UnsupportedEncodingException e)
???????? {
????????? e.printStackTrace();
???????? }?????
?????? }
?????? else outStr=outStr+Tstr;
???? }
???
???? return outStr;
? }
?
//全角轉半角
? public static final String QBchange(String QJstr)
? {
???? String outStr="";
???? String Tstr="";
???? byte[] b=null;
???? for(int i=0;i<QJstr.length();i++)
???? {????
?????? try
?????? {
???????? Tstr=QJstr.substring(i,i+1);
???????? b=Tstr.getBytes("unicode");
?????? }
?????? catch(java.io.UnsupportedEncodingException e)
?????? {
???????? e.printStackTrace();
?????? }????
??
?????? if (b[3] ==-1)
?????? {
???????? b[2]=(byte)(b[2]+32);
???????? b[3]=0;
??????? try
??????? {??????
???????? outStr=outStr+new String(b,"unicode");
??????? }
??????? catch(java.io.UnsupportedEncodingException e)
??????? {
???????? e.printStackTrace();
??????? }?????
?????? }
?????? else outStr=outStr+Tstr;
???? }
???
???? return outStr;
? }
}
輸出結果為:
HELLO
HELLO
HELLO
HELLO
?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=496423
?
posted on 2007-01-16 23:10
小石頭 閱讀(612)
評論(0) 編輯 收藏 所屬分類:
我的java學習