【问题标题】:Java char array to intJava char 数组到 int
【发布时间】:2010-04-21 13:33:45
【问题描述】:

是否可以将包含数字的char[] 数组转换为 int?

【问题讨论】:

    标签: java


    【解决方案1】:

    char[] 是否包含组成数字位数的 unicode 字符?在这种情况下,只需从 char[] 创建一个字符串并使用 Integer.parseInt:

    char[] digits = { '1', '2', '3' };
    int number = Integer.parseInt(new String(digits));
    

    【讨论】:

    • 从 Java 9 开始,您可以使用 Integer.parseInt(CharBuffer.wrap(digits),0,digits.length, 10) 避免复制数组。
    【解决方案2】:

    更高的性能和更简洁的代码(并且无需分配新的 String 对象):

    int charArrayToInt(char []data,int start,int end) throws NumberFormatException
    {
        int result = 0;
        for (int i = start; i < end; i++)
        {
            int digit = (int)data[i] - (int)'0';
            if ((digit < 0) || (digit > 9)) throw new NumberFormatException();
            result *= 10;
            result += digit;
        }
        return result;
    }
    

    【讨论】:

    • 无需将char 转换为int。而result *= 10; result += digit; 并不比直截了当的result = result * 10 + digit; 更好
    • -1 怎么样?
    【解决方案3】:
    char[] digits = { '0', '1', '2' };
    int number = Integer.parseInt(String.valueOf(digits));
    

    这也有效。

    【讨论】:

    • 如果 char 数组很长,这将不起作用,例如1534236469。您需要用户 Long.parseLong(String.valueOf(digits))
    【解决方案4】:

    可以将包含数字的char[] 数组转换为int。您可以使用以下不同的实现来转换数组。

    1. 使用Integer.parseInt

      public static int charArrayToInteger(char[] array){
          String arr = new String(array);
          int number = Integer.parseInt(arr);
      
          return number;
      }
      
    2. 没有Integer.parseInt

      public static int charArrayToInt(char[] array){
          int result = 0;
          int length = array.length - 1;
      
          for (int i = 0; i <= length; i++)
          {
               int digit = array[i] - '0'; //we don't want to cast by using (int)
               result *= 10;
               result += digit;
          }
          return result;
      }
      

    例子:

     public static void main(String []args){
        char[] array = {'1', '2', '3', '4', '5'};
        int result = 0;
    
        result = charArrayToInteger(array);
        System.out.println("Using Integer.parseInt: " + result);
    
        result = charArrayToInt(array);
        System.out.println("Without Integer.parseInt: " + result);
    
     }
    

    输出:

    Using Integer.parseInt: 12345
    Without Integer.parseInt: 12345
    

    【讨论】:

      【解决方案5】:

      另一种性能更高的方法:

      char[] digits = { '1', '2', '3' };
      
      int result = 0;
      for (int i = 0; i < chars.length; i++) {
         int digit = ((int)chars[i] & 0xF);
         for (int j = 0; j < chars.length-1-i; j++) {
              digit *= 10;
         }
         result += digit;
      }
      

      【讨论】:

      • 你可以简单地用result *= 10;替换你的内循环。
      • 您的意思是将digit *= 10; 替换为result *= 10; 吗?
      • 不,您可以去掉 整个 内部循环 (for (int j = ...) 并将所有三行替换为 result *= 10;
      【解决方案6】:

      好吧,你甚至可以试试这个

          char c[] = {'1','2','3'};
          int total=0,x=0,m=1;
          for(int i=c.length-1;i>=0;i--)
          {
              x = c[i] - '0';
              x = x*m;
              m *= 10;
              total += x;
          }
          System.out.println("Integer is " + total);
      

      【讨论】:

        猜你喜欢
        • 2014-06-28
        • 2013-12-11
        • 2023-03-25
        • 1970-01-01
        • 2014-11-30
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多