不使用解析或其他方法将String转换为Integer

时间:2017-02-11 20:35:39

标签: java string int

我正在尝试将字符串转换为整数,而不使用任何内置方法(如parseint()),对整数进行一些计算,然后将其转换回字符串。现在我可以将整数转换为字符串,但我需要帮助将初始String转换为整数。

public static void main(String[] args) {
     String s="1234";
     int i= (s)==1234;
     int i2=s/2 = 617;
     String s2=i2 = 617;

}

2 个答案:

答案 0 :(得分:1)

GrepCode上提供source code for Integer.parseInt。它使用package-private方法生成NumberFormatException错误,但您可以将其保留,并且代码仍可用于有效字符串。

public static int parseInt(String s, int radix) {
    int result = 0;
    boolean negative = false;
    int i = 0, len = s.length();
    int limit = -Integer.MAX_VALUE;
    int multmin;
    int digit;

    if (len > 0) {
        char firstChar = s.charAt(0);
        if (firstChar < '0') {
            if (firstChar == '-') {
                negative = true;
                limit = Integer.MIN_VALUE;
            }
            i++;
        }
        multmin = limit / radix;
        while (i < len) {
            digit = Character.digit(s.charAt(i++), radix);
            result *= radix;
            result -= digit;
        }
    }
    return negative ? result : -result;
}

答案 1 :(得分:0)

将String转换为int而不使用任何库函数

public static int stringToInt(String number) {
    int res = 0;
    for (int i = 0; i < number.length(); i++) {
        res = res * 10 + number.charAt(i) - '0';
    }
    return res;
}

执行您要执行的任何计算,然后使用以下方法将int转换回String,而不使用任何库函数

将int转换为没有任何库函数的String

   public static String parseInt(int integer)
{
    boolean ifNegative = integer<0;
    boolean ifMin = integer == Integer.MIN_VALUE;
    StringBuilder builder = new StringBuilder();        
    integer = ifNegative?(ifMin?Integer.MAX_VALUE:-integer):integer;    
    List<Integer> list = new LinkedList<Integer>(); 
    int remaining = integer;
    int currentDigit = 0 ;

    while(true)
    {
        currentDigit = remaining%10;
        list.add(currentDigit);
        remaining /= 10;
        if(remaining==0) break;
    }

    currentDigit = list.remove(0);
    builder.append(ifMin?currentDigit+1:currentDigit);
    for(int c : list)
        builder.append(c);
    builder.reverse().insert(0, ifNegative?'-':'+');
    return builder.toString();
}