`
mmdev
  • 浏览: 12908653 次
  • 性别: 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面试题解之第8题字符串转换整数atoi.zip

    java_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 ...

    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源码-ForPower:java工程师内功修炼手册

    Atoi.java,实现 atoi,将字符串转为整数 BackPack.java,背包算法。 BasicSort.java,基数排序。 BinaryAdd.java,给定两个二进制字符串,返回他们的和,leetcode 47. BinaryInsertSort.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 之字折线转换...

    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. 正则表达式匹配 难的 ...

    Study-Algorithm-Leetcode:[研究]学习算法-Leetcode

    指数姓名有效码无效的代码2个 3 4 5 6 7ReverseInteger.java 8 字符串到整数(atoi) StringToInteger.java StringToInteger(Invalid).java 11 装满水的容器ContainerWithMostWater.java 12 整数到罗马...

    javalruleetcode-lxxcode:Leetcode或Lintcode的代码

    4:两个排序数组的中位数(java,javascript) leetcode 5: 最长回文子串(java, javascript) leetcode 6: ZigZag 转换(java, javascript) leetcode 7: 反转整数(java, javascript) leetcode 8: String to Integer ...

    婚恋网站java源码-interview-preparation:面试准备

    婚恋网站java源码面试准备 注意:此准备已移至 . 此 repo 将仅用作某些文件的历史记录和存储。 给定问题... 澄清问题 考虑一个足够丰富但不乏味的示例 消除对预期结果的歧义 陈述并阐明关键假设:预期结果、任何内存...

    leetcode中文版-LeetCode:LeetcodeC++/Java

    两个排序数组的中位数 ary,binary search,dive and conquer 5 Longest Palindromic Substring 最长回文子串 string,dp 8 String to Integer(atoi) 字符串转整数 string 13 Roman to Integer 罗马数字转整数 number,...

    leetcode双人赛-leetcodeSolution:Leetcode一站式解决方案(JAVA版,持续更新)

    leetcode双人赛Java 中的 Leetcode 解决方案 1 二和 2 两个数相加 3 无重复字符的最长子串 4 两个有序数组的中位数 5 最长回文子串 6 之字形转换 7 反转整数 8 字符串到整数 (atoi) 9 回文数 10 正则表达式匹配 11 ...

    leetcode寻找最近的-LeetCode:Leetcode解决方案及常用算法(Java&Python&Go)

    寻找两个正序数组的中位数 t4 5 最长回文子串 t5 6 Z 字形变换 t6 7 整数反转 t7 8 字符串转换整数 (atoi) t8 9 回文数 t9 10 正则表达式匹配 t10 11 盛最多水的容器 t11 12 整数转罗马数字 t12 , 13

    leetcode2sumc-solutions:LeetCode及PythonTips部分题目求解

    两个有序数组的中位数 难的 Java 62ms/6.25% 08 字符串到整数 (atoi) 中等的 Java 42ms/5.2% 56 合并间隔 中等的 Java 14 毫秒/60.92% 14 最长公共前缀 简单的 8 毫秒/98.86% 64 最小路径和 中等的 5ms/44.1

    learn_code

    两数相加中等第三题:无重复字符的最长子串中等第四题:寻找两个有序分段的中位数困难第五题:最长回文子串中等第六题:Z字形变换中等第七题:二次反转简单第八题:字符串转换整体(atoi)中等第九题:回文数简单第...

Global site tag (gtag.js) - Google Analytics