您的位置:首页 > 编程语言 > Java开发

java中的atoi

2013-11-04 15:04 267 查看
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)));

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: