将含有特殊字符的字符串转换成纯英文字母的字符串原始字符串可以是任何字符串,需要转换成只含有26个英文字母的字符串,要求转换过后要能转换回去我的思路是将原字符串转换成二进制串,然后将其转换成26进制
不知道思路是否可行,望高手指教
不知道思路是否可行,望高手指教
解决方案 »
- 求一个正则写法
- java jxl读取Excel 中的数据,并插入数据库
- liferay 中写filter问题
- flash上传图片数据流问题
- 请教Struts的Action中的servlet是什么?
- session中的问题
- 求助:sql语句的where子句中的变量问题(涉及中文转化)
- 菜鸟求助!求一个人事或学生或学历管理系统的源码!要有增删改查功能……最好简单点!数据库用SQL2000
- 一个很严肃的问题,请大家积极参与讨论,到底读在职研究生好还是本科好?
- 大家来看看【一个菜鸟关于EJB的问题!!!】
- 大家开发struts2时,使用Eclipse插件吗,还是纯手写
- 按钮执行的是前一个按钮的action
public static void main(String args[]) throws Exception {
String str="!2Asf ,@#$ff";
String result=toAString(str);
System.out.println(result);
String original=toString(result);
System.out.println(original);
}
public static String toAString(String str){
byte[] bytes=str.getBytes();
StringBuilder sb=new StringBuilder();
for(int i=0;i<bytes.length;i++){
String temp=Integer.toString(bytes[i]&0xff,26);
if(temp.length()==1){
temp="0"+temp;
}
char[] chars=temp.toCharArray();
for(int j=0;j<chars.length;j++){
chars[j]=(char)('A'+Character.digit(chars[j],26));
sb.append(chars[j]);
}
}
return sb.toString();
}
public static String toString(String str){
char[] chars=str.toCharArray();
byte[] bytes=new byte[str.length()/2];
for(int i=0;i<chars.length;i++){
chars[i]=Character.forDigit((chars[i]-'A'),26);
}
for(int i=0;i<bytes.length;i++){
bytes[i]=(byte)(Integer.parseInt(new String(new char[]{chars[2*i],chars[2*i+1]}),26));
}
return new String(bytes);
}
}
F:\java>java Test
BHBYCNELDYBGBSCMBJBKDYDY
!2Asf ,@#$ff
public class Test{
public static void main(String args[]) throws Exception {
String str="!2Asf ,@#$ff";
System.out.println("原字符串是:"+str);
String result=toAlphaString(str);
System.out.println("转换结果为:"+result);
String original=toString(result);
System.out.println("由英文字符串转复原字符串:"+original);
}
//把一个字符串转,转为只含英文字符的字符串。
//
public static String toAlphaString(String str){
byte[] bytes=str.getBytes(); //得到字符串的字节数据
StringBuilder sb=new StringBuilder();
for(int i=0;i<bytes.length;i++){
String temp=Integer.toString(bytes[i]&0xff,26); //把每个字节都看做一个26进制的数,并把这个数转为字符串
if(temp.length()==1){ //齐两位
temp="0"+temp;
}
char[] chars=temp.toCharArray(); //把字符串转为字符数组
for(int j=0;j<chars.length;j++){
chars[j]=(char)('A'+Character.digit(chars[j],26)); //对第一个字符,都把它平移到26个大写的英文字母区域
sb.append(chars[j]);
}
}
return sb.toString();
}
//把一个只含英文字符的字符串还原为原字符串
//算法是toAlplhaString的逆过程。
//
public static String toString(String str){
char[] chars=str.toCharArray();
byte[] bytes=new byte[str.length()/2];
for(int i=0;i<chars.length;i++){
chars[i]=Character.forDigit((chars[i]-'A'),26);
}
for(int i=0;i<bytes.length;i++){
bytes[i]=(byte)(Integer.parseInt(new String(new char[]{chars[2*i],chars[2*i+1]}),26));
}
return new String(bytes);
}
}
结果为:
F:\java>java Test
原字符串是:!2Asf ,@#$ff
转换结果为:BHBYCNELDYBGBSCMBJBKDYDY
由英文字符串转复原字符串:!2Asf ,@#$ff