二进制与任意字符转换程序代码
2009-05-20 23:07
218 查看
写这个小程序的时候我主要考虑了以下几点:
1、作为工具类,静态方法比较好一点,Java类库中util中就有很多是静态的工具。
2、原程序没有充分利用到Java类库,有冗余。自己编写的代码越多,bug的几率越大!
3、异常处理是健壮的代码不可少的。输入一堆0、1很容易出错,而且万一分隔符分得不恰当呢?
4、在大量字符串连接时,String创建了大量的无用的中间String,其开销是指数增长d俄。而用StringBuffer,其开销是线性增长的。
5、用for/each循环代替for。这个代码只是要遍历,和下标无关,用for/each更好一点。
备注:StringTokenizer类可以实现字符串分析,但是StringTokenizer是出于兼容性的原因而被保留的遗留类。建议所有寻求此功能的人使用 String 的 split方法或 java.util.regex 包,中国自学编程网,www.zxbc.cn 。
public class StrBinaryTurn {
//将字符串转换成二进制字符串,以空格相隔
public String toBinary(String str){
char[] strChar = str.toCharArray();
String result = "";
for(int i = 0; i < strChar.length; i++){
result += Integer.toBinaryString(strChar) + " ";
}
return result;
}
//将二进制字符串转换成Unicode字符串
public String toStr(String binStr){
String[] tempStr = StrToStrArray(binStr);
char[] tempChar = new char[tempStr.length];
for(int i = 0; i < tempStr.length; i++){
tempChar = toChar(tempStr);
}
return String.valueOf(tempChar);
}
//将二进制字符串转换为char
private char toChar(String binStr){
int[] temp = binStrToIntArray(binStr);
int sum = 0;
for(int i = 0; i < temp.length; i++){
sum += temp[temp.length - 1 - i] << i;
}
return (char)sum;
}
//将初始二进制字符串转换成字符串数组,以空格相隔
private String[] StrToStrArray(String str){
return str.split(" ");
}
//将二进制字符串转换成int数组
private int[] binStrToIntArray(String binStr){
char[] temp = binStr.toCharArray();
int[] result = new int[temp.length];
for(int i = 0; i < temp.length; i++){
result = temp - 48;
}
return result;
}
public static void main(String[] args){
StrBinaryTurn cTob = new StrBinaryTurn();
System.out.println(cTob.toBinary("橘子,好吃!aaa"));
System.out.println();
System.out.println(cTob.toBinary("999111"));
System.out.println();
System.out.println(cTob.toBinary("What a nice day!"));
System.out.println();
System.out.println(cTob.toBinary("^@^ - -! ()★"));
System.out.println();
System.out.println();
System.out.println(cTob.toStr("110101001011000 101101101010000 " +
"1111111100001100 101100101111101 " +
"101010000000011 1111111100000001 " + [Page]
"1100001 1100001 1100001 "));
System.out.println(cTob.toStr("111001 111001 111001 " +
"110001 110001 110001"));
System.out.println(cTob.toStr("1010111 1101000 1100001 " +
"1110100 100000 1100001 100000 1101110 " +
"1101001 1100011 1100101 100000 1100100 " +
"1100001 1111001 100001 "));
System.out.println(cTob.toStr("1011110 1000000 1011110 " +
"100000 101101 100000 101101 100001 100000 " +
"1111111100001000 1111111100001001 10011000000101 "));
}
}
输出结果:
110101001011000 101101101010000 1111111100001100 101100101111101 101010000000011 1111111100000001 1100001 1100001 1100001
111001 111001 111001 110001 110001 110001
1010111 1101000 1100001 1110100 100000 1100001 100000 1101110 1101001 1100011 1100101 100000 1100100 1100001 1111001 100001
1011110 1000000 1011110 100000 101101 100000 101101 100001 100000 1111111100001000 1111111100001001 10011000000101
橘子,好吃!aaa
999111
What a nice day!
^@^ - -! ()★
1、作为工具类,静态方法比较好一点,Java类库中util中就有很多是静态的工具。
2、原程序没有充分利用到Java类库,有冗余。自己编写的代码越多,bug的几率越大!
3、异常处理是健壮的代码不可少的。输入一堆0、1很容易出错,而且万一分隔符分得不恰当呢?
4、在大量字符串连接时,String创建了大量的无用的中间String,其开销是指数增长d俄。而用StringBuffer,其开销是线性增长的。
5、用for/each循环代替for。这个代码只是要遍历,和下标无关,用for/each更好一点。
备注:StringTokenizer类可以实现字符串分析,但是StringTokenizer是出于兼容性的原因而被保留的遗留类。建议所有寻求此功能的人使用 String 的 split方法或 java.util.regex 包,中国自学编程网,www.zxbc.cn 。
public class StrBinaryTurn {
//将字符串转换成二进制字符串,以空格相隔
public String toBinary(String str){
char[] strChar = str.toCharArray();
String result = "";
for(int i = 0; i < strChar.length; i++){
result += Integer.toBinaryString(strChar) + " ";
}
return result;
}
//将二进制字符串转换成Unicode字符串
public String toStr(String binStr){
String[] tempStr = StrToStrArray(binStr);
char[] tempChar = new char[tempStr.length];
for(int i = 0; i < tempStr.length; i++){
tempChar = toChar(tempStr);
}
return String.valueOf(tempChar);
}
//将二进制字符串转换为char
private char toChar(String binStr){
int[] temp = binStrToIntArray(binStr);
int sum = 0;
for(int i = 0; i < temp.length; i++){
sum += temp[temp.length - 1 - i] << i;
}
return (char)sum;
}
//将初始二进制字符串转换成字符串数组,以空格相隔
private String[] StrToStrArray(String str){
return str.split(" ");
}
//将二进制字符串转换成int数组
private int[] binStrToIntArray(String binStr){
char[] temp = binStr.toCharArray();
int[] result = new int[temp.length];
for(int i = 0; i < temp.length; i++){
result = temp - 48;
}
return result;
}
public static void main(String[] args){
StrBinaryTurn cTob = new StrBinaryTurn();
System.out.println(cTob.toBinary("橘子,好吃!aaa"));
System.out.println();
System.out.println(cTob.toBinary("999111"));
System.out.println();
System.out.println(cTob.toBinary("What a nice day!"));
System.out.println();
System.out.println(cTob.toBinary("^@^ - -! ()★"));
System.out.println();
System.out.println();
System.out.println(cTob.toStr("110101001011000 101101101010000 " +
"1111111100001100 101100101111101 " +
"101010000000011 1111111100000001 " + [Page]
"1100001 1100001 1100001 "));
System.out.println(cTob.toStr("111001 111001 111001 " +
"110001 110001 110001"));
System.out.println(cTob.toStr("1010111 1101000 1100001 " +
"1110100 100000 1100001 100000 1101110 " +
"1101001 1100011 1100101 100000 1100100 " +
"1100001 1111001 100001 "));
System.out.println(cTob.toStr("1011110 1000000 1011110 " +
"100000 101101 100000 101101 100001 100000 " +
"1111111100001000 1111111100001001 10011000000101 "));
}
}
输出结果:
110101001011000 101101101010000 1111111100001100 101100101111101 101010000000011 1111111100000001 1100001 1100001 1100001
111001 111001 111001 110001 110001 110001
1010111 1101000 1100001 1110100 100000 1100001 100000 1101110 1101001 1100011 1100101 100000 1100100 1100001 1111001 100001
1011110 1000000 1011110 100000 101101 100000 101101 100001 100000 1111111100001000 1111111100001001 10011000000101
橘子,好吃!aaa
999111
What a nice day!
^@^ - -! ()★
相关文章推荐
- 简单LinuxC程序关于加密(将任意长字符转换为定长整数)
- n的阶乘;计算1!+2!+3!+4!+...+10!;编写代码,演示多个字符从两边移动,向中间汇聚;求ax^2+bx+c=0的解;写一个程序返回参数二进制中1的个数;6.求两个数的最大公约数。
- 编写程序把一个保存有二进制小数的字符数组转换为浮点数
- 简单LinuxC程序关于加密(将任意长字符转换为定长整数)
- 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果
- Python 正整数任意进制互转换代码示例
- 二进制值和十六进制字符串相互转换的C++代码
- 编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
- //1.编写代码模拟三次密码输入的场景。//2.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
- Python学习笔记(15)-Python代码转换为exe可执行程序详解
- 二进制值和十六进制字符串相互转换的C++代码
- 编写一个程序从标准输入读取字符,并把他们写到标准输出,除了大写字母转换成小写字母之外,其他的原样输出。
- (C语言)实现对任意浮点型数据从十进制到二进制的转换
- JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
- [原创]VB程序 - 处理字符和文件名称的代码模块
- 用位运算将一个字符的二进制倒置 (c代码)
- 【实用代码】C#中转换全半角字符的函数
- c++从文件读数据转换为二进制,再转换为字符文件
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- 二进制颜色代码大全(含图)透明度与十六进制代码转换