【问题标题】:Java array of char of number to Integer数字字符的Java数组到整数
【发布时间】:2012-10-09 09:04:09
【问题描述】:

我需要使用 BufferedReader 读取文件,在第二行我知道总会有 2 个整数:例如 456 666;但我不知道他们会有多少位数,所以在使用 BufferedReader 提取行(字符串类型)后,我逐字符读取该字符串以获取数字并将它们添加到 char 数组中。当我拥有所有数字时,我用 '\0' 填充数组 示例:

array[0] = '4'
array[1] = '5'
array[2] = '6'
array[3] = '\0'
array[4] = '\0'
and so on

现在我想把这个数组变成一个整数。 我尝试首先将此数组转换为字符串,然后应用 Integer.parseInt 但我不起作用。我不知道如何解决这个问题。有什么帮助吗?

【问题讨论】:

  • @LewsTherin:那不是斯特林特格吗?
  • @Wug 哈哈,只是说出来很奇怪;)

标签: java arrays casting integer


【解决方案1】:

使用字符串构造函数public String(char[] letters) 然后Integer.parseInt(...)

【讨论】:

    【解决方案2】:

    你不能将数组转换为字符串...但是如果你使用空格而不是\0,那么你可以这样做:

    int i = Integer.parseInt(String.valueOf(array).trim());
    

    关于评论 - 很酷,trim() 也消除了尾随的 0x0

    public static void main(final String[] args) {
        char[] chars = new char[5];
        chars[2] = '9';
        System.out.printf("Original length: %d%n",String.valueOf(chars).length());
        System.out.printf("Trimmed length:  %d%n",String.valueOf(chars).trim().length());
        System.out.printf("Parsed:          %d%n",Integer.parseInt(String.valueOf(chars).trim()));
    }
    

    【讨论】:

    • 即使您确实使用空值作为填充符,您仍然应该能够这样做。你只会得到“456”而不是“456”,Integer.parseInt() 应该能够处理这两者。
    【解决方案3】:
        // Assume an initial size of the array
        char array[] = new char[5];
        array[0] = '4';
        array[1] = '5';
        array[2] = '6';
        array[3] = '\0';
        array[4] = '\0';
    
    
        StringBuffer buffer = new StringBuffer();
    
        for (int i = 0; i < array.length && array[i] != '\0'; i++){
            buffer.append(array[i]);
        }
    
        int myInteger = Integer.parseInt(buffer.toString());
    

    如果你想先创建一个String,然后将它解析为一个Integer,我建议你使用StringBuffer,主要是因为Java中的String是不可变的(你不能改变其中的特定字符)。如果您使用 StringBuffer,您可以通过将 toString 方法应用于新创建的对象然后使用 Integer.parseInt 来解决此问题。

    【讨论】:

      【解决方案4】:

      好的,如果您只是想将该数组转换为字符转换为整数,您可以这样做。

      字符数组[] = 新字符[5];

          array[0] = '4';
          array[1] = '5';
          array[2] = '6';
          array[3] = '\0';
          array[4] = '\0';
      
          String newString = String.copyValueOf(array);
          newString = newString.replace("\0", "");
      
          int newInt = Integer.parseInt(newString);
      
          System.out.println(array);
          System.out.println(newInt);
      

      以上代码已经过测试验证。

      【讨论】:

      • 我想补充一点,你应该可以使用 newString = newString.trim();作为 newString = newString.replace("\0", ""); 的替代
      【解决方案5】:

      如果您只读取该行并尝试将其解析为一个 int。由于您不知道它是否为整数,因此请使用异常来处理它:

      String[] nextLine = reader.nextLine().split("\\s+") ;
      Integer[] integer = new Integer[nextLine.length()] ;
      try
      {
        for(int i=0; i < nextLine.length();i++)  
         integer[i] = Integer.parseInt(nextLine[i]) ;
      }
      catch(NumberFormatException exception)
      {
        exception.printStackTrace();
      }  
      

      【讨论】:

      • 有两个int,所以先在\s+上分割行
      【解决方案6】:

      您最好使用Scanner

      Scanner input = new Scanner(new File("myfile.txt"));
      int first  = input.nextInt();
      int second = input.nextInt();
      

      【讨论】:

        【解决方案7】:

        假设 array 是您的 char 数组,这应该可以完成您的工作:

        String str = "";
        for (char c : array)
            str += c;
        
        int result = Integer.parseInt(str);
        

        【讨论】:

        • String.valueOf(array) 是一种更好的方法。
        • @Wug 好点。你是对的:) 但可能 valueOf() 方法正在执行相同的迭代以返回相同的字符串。我错了吗?
        【解决方案8】:

        我强烈建议改用Scanner。来自文档:

        一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。

        Scanner 将使用空格作为其默认分隔符,因此您应该能够简单地为每个预期的整数标记调用 sc.nextInt()。有关使用示例,请参阅链接页面。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多