java中的atoi

4 篇文章 0 订阅
4 篇文章 0 订阅
C代码移植到Java代码过程中,会发现C中的某些函数在Java中找不到可以完全代替的。最常见的就是C语言中的atoi函数,用来将一个字符串转换为整数。Java中一般用Integer.parseInt()来将一个字符串转换为int型。但是二者之间还是有很大的区别,就会导致移植的代码功能不完全相同。
本来想到网上找一个现成的用Java语言写的与atoi功能相同的方法,但是没有找到,于是干脆凭着自己对atoi的了解写了一个。因为没有对照atoi的源码,只是凭了解写的,所以可能下面的代码也不是与之完全相同。而且我也没考虑优化。

代码:
    /**
     * it's the same as atoi method in c/c++
     *
     * @param para
     *            str in
     * @return atoi(para)'s result
     */
    public static int atoi(String para) {
        if (para == null || para.trim().length() == 0) {
            return 0;
        }

        final char PLUS = '+';
        final char MINUS = '-';
        int ret = 0;
        String str = para.trim();
        int len = str.length();

        // record the last number's position
        int pos = len;

        for (int i = 0; i < len; i++) {
            char ch = str.charAt(i);
            if (i == 0) {

                // may be start as "+" or "-"
                if (ch == PLUS || ch == MINUS) {
                    continue;
                }
            }
            if (!(ch >= '0' && ch <= '9')) {
                pos = i;
                break;
            }
        }

        try {
            // "+1" can't be parsed to 1 in java
            // so specially dealing with it
            if (str.charAt(0) == PLUS) {
                str = str.substring(1);
                pos--;
            }

            ret = Integer.parseInt(str.substring(0, pos));
        } catch (Exception e) {
            //
        }
        return ret;
    }

测试用例:
    public void testAtoi1() {
        String str1 = "0";
        String expected1 = "0";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = "-10000";
        String expected2 = "-10000";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = "+5";
        String expected3 = "5";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi2() {
        String str1 = "  100";
        String expected1 = "100";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = "  -10000";
        String expected2 = "-10000";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = " +5  ";
        String expected3 = "5";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi3() {
        String str1 = "  100a55";
        String expected1 = "100";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = "abc";
        String expected2 = "0";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = "12 34";
        String expected3 = "12";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi4() {
        String str1 = "+";
        String expected1 = "0";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = "+-123";
        String expected2 = "0";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = "+12%";
        String expected3 = "12";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi5() {
        String str1 = "";
        String expected1 = "0";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = " ";
        String expected2 = "0";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = null;
        String expected3 = "0";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi6() {
        String str1 = " +123456789afe";
        String expected1 = "123456789";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = " + 12";
        String expected2 = "0";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = " -123.12e";
        String expected3 = "-123";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
   
    public void testAtoi7() {
        String str1 = " 555$%^";
        String expected1 = "555";
        assertEquals(expected1, String.valueOf(Brwin.atoi(str1)));
        String str2 = "你好";
        String expected2 = "0";
        assertEquals(expected2, String.valueOf(Brwin.atoi(str2)));
        String str3 = " -12ふぁ";
        String expected3 = "-12";
        assertEquals(expected3, String.valueOf(Brwin.atoi(str3)));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值