`
qjoycn
  • 浏览: 1226640 次
文章分类
社区版块
存档分类
最新评论

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)));
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics