【问题标题】:Convert String to Integer without using parse or other methods [closed]在不使用解析或其他方法的情况下将字符串转换为整数 [关闭]
【发布时间】:2017-02-11 20:35:38
【问题描述】:

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

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

}

【问题讨论】:

  • 这些行应该做什么?方法中除了第一行之外的所有内容都不会编译。
  • 和往常一样有这些非常奇怪的请求:为什么?你尝试过什么来实现你想要的,为什么你甚至想要那个?
  • 它不是实际代码。我只是想为我想要完成的事情的帮助者提供一个想法。描述应该有帮助
  • 1.那不是实际的代码,我试图给出我需要什么的想法。 2. 如果我可以使用内置的方法,我不会寻求帮助
  • @luke,我只需要能够在不使用内置方法的情况下将字符串转换为整数。这就是我需要帮助的全部内容:)

标签: java string int


【解决方案1】:

source code for Integer.parseInt 可在 GrepCode 上找到。它使用包私有方法生成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;
}

【讨论】:

    【解决方案2】:

    不使用任何库函数将 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多