早上看到了一个“二进制与任意字符互转小程序”,觉得有几点不足,因此动手改进一下,不足之处欢迎批评指正。也请原作者不要介怀。

public class StringBinaryConvertor {
    //字符串转化为2进制
    public static String stringToBinary(String str){
        StringBuffer sb = new StringBuffer("");
        char[] charArray = str.toCharArray();
        for(char c : charArray) {
            sb.append(Integer.toBinaryString((int)c)).append(" ");
        }
        return sb.toString();
    }

    //2进制转化为字符串
    public static String binaryToString(String binStr) throws NumberFormatException{
        StringBuffer sb = new StringBuffer("");
        String[] strArray = binStr.split(" ");
        for(String s : strArray){
            sb.append((char)(Integer.parseInt(s, 2)));
        }
        return sb.toString();
    }
}


class Test {
    public static void main(String[] args) {
        String str = StringBinaryConvertor.stringToBinary("善查类库,简化代码!Right!");
        System.out.println(str);
        System.out.println();
        
        try{
            System.out.println(StringBinaryConvertor.binaryToString(str));
            System.out.println(StringBinaryConvertor.binaryToString("010021111"));
        } catch (NumberFormatException nfe){
            System.out.println("Illegal binary!");
        }
    }
}

我主要考虑了几点:
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 包。
这是翔南提醒我的,原来还真不知道。正是应了那句话:独学而无友,则孤陋而寡闻。

Feedback

# re: 对“二进制与任意字符互转小程序”的一点改进  回复  更多评论   

2007-10-20 13:58 by 翔南
不介怀不介怀 哈哈
说的挺对的

其实我真的不是很知道什么时候该用static,什么时候不用..望指点!

Integer的public static int parseInt(String s,
int radix)
throws NumberFormatException
方法至今才知道,看来我对java类库了解的太少了..
异常处理再加以配合,真的很棒!

还有StringBuffer的问题,当初也没多想,听你这么一说,才意识到效率的问题..
挺可怕的..

for each当初想用来着,我也挺爱用的,但有一次在我们学校机房用(机房jdk貌似版本很低),就没成功,我以后就老想着万一别人的jdk版本没到1.5那不是就不能编译通过了..呵呵

总结一下,以后编程不能只求实现,一定要设计好,要多考虑考虑算法和充分利用java类库!

# re: 对“二进制与任意字符互转小程序”的一点改进  回复  更多评论   

2007-10-20 15:30 by Raylong
@翔南
刚才又改进了一下,用StringTokenizer类功能更强大。

# re: 对“二进制与任意字符互转小程序”的一点改进  回复  更多评论   

2007-10-20 22:04 by 翔南
其实用String的split方法也可以达到这种效果,反正split(String regex)的参数是个正则表达式
如下就可以实现用空格、,和换行符作为单词的分割标志
binStr.split(" |,|\\n");

况且偶在StringTokenizer的API中看到这样一句话
"StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包"

所以偶觉着这块还是用split的好吧~~

# re: 对“二进制与任意字符互转小程序”的一点改进  回复  更多评论   

2007-10-20 22:11 by Raylong
@翔南
又是正则表达式,看来我真的要学了,刻不容缓 呵呵!
那你说的我没注意到,学习一下!

只有注册用户登录后才能发表评论。


网站导航: