`
xlover
  • 浏览: 245036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的atoi

阅读更多
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)));
    }
分享到:
评论

相关推荐

    java-leetcode题解之008-String-to-Integer(atoi)

    java入门 java_leetcode题解之008_String_to_Integer(atoi)

    java面试题-leetcode题解之第8题字符串转换整数atoi.zip

    在Java编程语言中,面试题经常涉及到LeetCode平台上的题目,这些题目旨在考察候选人的算法理解和编程技巧。其中,第8题"字符串转换整数 (atoi)"是一个经典的面试题,它要求实现一个函数,该函数能将给定的字符串转换...

    java-leetcode面试题解之第8题字符串转换整数atoi.zip

    这道题目是LeetCode中的第8题,名为“字符串转换整数 (atoi)”。本题主要考察的是字符串处理和数学转换的能力,特别是将一个可能包含非数字字符的字符串转化为整数。以下是对该题目的详细解析: 首先,我们需要理解...

    LeetCode String to Integer(atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input ...

    LeetCode题解(java语言实现).pdf

    * Median of Two Sorted Arrays Java:该题目要求找到两个排序数组的中位数,实现方法使用了二分查找算法。 * Regular Expression Matching in Java:该题目要求匹配字符串和正则表达式,实现方法使用了动态规划算法...

    Coding Interview In Java

    19 String to Integer (atoi) 59 20 Merge Sorted Array 61 ... ... 231 Counting Bits 561 232 Maximum Product of Word Lengths 563 233 Gray Code 565 234 Permutations 567 235 Permutations II 571 236 ...

    javalruleetcode-leetcode-solutions-java:leetcode-解决方案-java

    (atoi).java) 9 [Java](/Java/009 回文数.java) 10 [Java](/Java/010 正则表达式匹配.java) 11 [Java](/Java/011 最多水的容器.java) 17 [Java](/Java/017 电话号码的字母组合.java) 20 [Java](/Java/020 有效括号....

    java中字符串转整数及MyAtoi方法的实现

    java中字符串转整数及MyAtoi方法的实现 在 Java 中,将字符串转换为整数是一种常见的操作,而 MyAtoi 方法是将字符串转换为整数的一种特殊实现方式。在本篇文章中,我们将详细介绍 Java 中字符串转整数及 MyAtoi ...

    Java 微软面试题

    这些题目涵盖了广泛的Java和计算机科学基础,主要涉及算法设计、数据结构、字符串处理、内存管理以及逻辑思维。以下是对部分题目的详细解析: 1. **两两之差绝对值最小的值**:这是一个关于数组处理的问题,可以...

    LeetCode前400题Java精美版

    【LeetCode前400题Java精美版】是个人对LeetCode中前400道题目进行解答并整理的笔记,主要使用Java语言编写。这个资料的特点在于,它提供的解决方案多数情况下是经过优化的,能够击败99%的提交,即使在某些复杂问题...

    汉诺塔java源码-ForPower:java工程师内功修炼手册

    Atoi.java,实现 atoi,将字符串转为整数 BackPack.java,背包算法。 BasicSort.java,基数排序。 BinaryAdd.java,给定两个二进制字符串,返回他们的和,leetcode 47. BinaryInsertSort.java,二分插入排序。 ...

    java程序员面试宝典 (2).pdf

    在当今竞争激烈的IT行业中,Java程序员一职备受追捧,因此如何在面试中脱颖而出成为求职者们关注的焦点。《Java程序员面试宝典》这本书为求职者们提供了一个全面的指南,帮助他们提升面试成功率。无论你是初出茅庐的...

    java贪吃蛇源码-Interview-Stuff:面试问题、答案、Java、Python、数据库、Web、Javascript

    java贪吃蛇源码采访资料 ...Atoi 实现 strstr 最长公共前缀子数组与给定的总和解决了上述问题? 再问一些问题 链接列表: 在链表中查找中间元素 反转链表 旋转链表 以给定大小的组反转链表 检测链表中的

    Java面试宝典和大学生面试宝典

    让写的常见程序有:数据结构书上的程序,经典 C 程序(strcmp、strcpy、atoi……) ,C++程序(表现 C++经典特性的) 。第 一次在面试官眼皮底下在纸上写程序,思路容易紊乱。建议大家事先多 练习,找个同学坐在边上...

    leetcode338-Java:用于Java学习

    章Java内容 日期 leetcode RW_num = review_times NF = 未完成 001 二和//Rw_1 002 两个数相加//Rw_1 003 无重复字符的最长子串 // Rw_1 004 两个排序数组的中位数 // Rw_1 005 最长回文子串//Rw_1 006 之字折线转换...

    java源程序

    以上介绍的是C++中的一些基本概念和常用操作,如字符串处理函数、内存管理、结构体定义与操作以及字符串到整数的转换。这些知识点对于学习和掌握C++语言至关重要。希望这些内容能够帮助读者更好地理解和应用C++。

    java各种各样的面试题大全

    - 值传递和引用传递:Java中一切都是对象,参数传递默认是按值传递,但对象引用传递的是副本,修改对象内容会影响原对象。 - 浅克隆和深克隆:浅克隆复制对象本身,但不复制其引用的对象;深克隆复制对象及其引用...

    LeetCode_Java:实践

    标题源代码困难时间解决了1个简单的2017/11/22 15中等的2017/11/23 16中等的2017/11/23 18岁中等的2017/11/232个中等的2017/11/22 445中等的...简单的2017/12/10 9 回文数Java简单的2017/12/128 字符串到整数(atoi)

    Java-Leetcode:LeetCode中算法的实践。 已解决400个问题

    字符串到整数atoi 有限状态机 9 回文数 弦乐 11 盛满水的容器 双指针 12 整数到罗马 弦乐 13 罗马到整数 弦乐 14 最长公共前缀 弦乐 15 3和 双指针 16 3sum最接近 双指针 17 电话号码的字母组合 递归 19 ...

    leetcode18java-Leet:我对LeetCode挑战问题的解决方案。语言因问题而异

    两个有序数组的中位数 难的 Python2 5. 最长回文子串 中等的 C 6. 之字形转换 中等的 Javascript 7. 反转整数 简单的 C# 8. 字符串到整数 (atoi) 中等的 Ruby 9. 回文数 简单的 Python 3 10. 正则表达式匹配 难的 ...

Global site tag (gtag.js) - Google Analytics