【问题标题】:JAVA: How to convert String ArrayList to Integer Arraylist?JAVA:如何将字符串数组列表转换为整数数组列表?
【发布时间】:2015-08-14 17:09:44
【问题描述】:

我的问题是—— 如何将 String ArrayList 转换为 Integer ArrayList?

我的号码后面有° EX: 352°。如果我将它们放入 Integer ArrayList,它将无法识别这些数字。为了解决这个问题,我将它们放入一个 String ArrayList 中,然后它们被识别出来。

我想将该字符串数组列表转换回整数数组列表。那么我该如何实现呢?

这是我到目前为止的代码。我想将 ArrayString 转换为 Int Arraylist。

        // Read text in txt file.
    Scanner ReadFile = new Scanner(new File("F:\\test.txt"));

    // Creates an arraylist named ArrayString
    ArrayList<String> ArrayString = new ArrayList<String>();

    // This will add the text of the txt file to the arraylist.
    while (ReadFile.hasNextLine()) {

        ArrayString.add(ReadFile.nextLine());
    }

    ReadFile.close();


    // Displays the arraystring.
    System.out.println(ArrayString);

提前致谢

迭戈

PS:对不起,如果我不完全清楚,但英语不是我的主要语言。我对 Java 也很陌生。

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    您可以使用String.replaceAll 替换您想要忽略的任何字符(在本例中为°):

     "somestring°".replaceAll("°",""); // gives "sometring"
    

    或者您可以使用 String.substring 删除最后一个字符:

    "somestring°".substring(0, "somestring".length() - 1); // gives "somestring"
    

    其中一个应该适用于您的情况。

    现在剩下的就是使用 Integer.parseInt 即时解析输入:

    ArrayList<Integer> arrayInts = new ArrayList<Integer>();
    
    while (ReadFile.hasNextLine()) {
        String input = ReadFile.nextLine();
        try {
            // try and parse a number from the input. Removes trailing `°`
            arrayInts.add(Integer.parseInt(input.replaceAll("°","")));
        } catch (NumberFormatException nfe){
            System.err.println("'" + input + "' is not a number!");
        }
    }
    

    您可以在输入不是实际数字的情况下添加自己的处理。

    【讨论】:

    • 是的,但如果我这样做,它会说它不是一个数字。因为它们后面有°,所以它是 273° 250°,它说这些不是数字,但我正试图从 273° 转到 int arraylist..
    • somestring 是什么意思,我需要用什么来替换它?对不起,如果听起来很愚蠢:/
    • 好吧,它现在删除了°,但我仍然收到不是数字消息。我的输出现在是:'' 不是数字! [273、183、182、140]
    • 显示输入示例
    • 273° 183° 182° 140° 你是这个意思吗?
    【解决方案2】:

    对于更宽松的解析过程,您可以考虑使用正则表达式。

    注意:以下代码使用 Java 7 特性(try-with-resources 和菱形运算符)来简化代码,同时说明良好的编码实践(关闭扫描程序)。它还使用以小写开头的变量的通用命名约定,但您当然可以使用任何您想要的约定)。

    此代码使用内联字符串而不是文件有两个原因:它显示正在处理的数据,并且它可以按原样运行以进行测试。

    public static void main(String[] args) {
        String testdata = "55°\r\n" +
                          "bad line with no number\r\n" +
                          "Two numbers: 123   $78\r\n";
        ArrayList<Integer> arrayInt = new ArrayList<>();
        try (Scanner readFile = new Scanner(testdata)) {
            Pattern digitsPattern = Pattern.compile("(\\d+)");
            while (readFile.hasNextLine()) {
                Matcher m = digitsPattern.matcher(readFile.nextLine());
                while (m.find())
                    arrayInt.add(Integer.valueOf(m.group(1)));
            }
        }
        System.out.println(arrayInt);
    }
    

    这将打印:

    [55, 123, 78]
    

    【讨论】:

      【解决方案3】:

      您必须创建一个使用 Integer 包装类类型的 ArrayList 的新实例,并为其提供与 String 列表相同大小的缓冲区:

      List<Integer> myList = new ArrayList<>(ArrayString.size());
      

      然后使用包装类中的解析方法遍历Arraystring,将值从一个分配到另一个

      for (int i = 0; i < ArrayString.size(); i++) {
          myList.add(Integer.parseInt(ArrayString.get(i)));
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        相关资源
        最近更新 更多