繁体   English   中英

JAVA:如何将String ArrayList转换为Integer Arraylist?

[英]JAVA: How to convert String ArrayList to Integer Arraylist?

我的问题是-如何将字符串ArrayList转换为Integer ArrayList?

我后面有° ,例如EX: 352° 如果将它们放入Integer ArrayList中,它将无法识别数字。 为了解决这个问题,我将它们放入String ArrayList中,然后对其进行识别。

我想将字符串Arraylist转换回Integer 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也很陌生。

您可以使用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!");
    }
}

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

您将必须创建一个使用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)));

}

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

注意:以下代码使用Java 7功能(尝试资源和菱形运算符)来简化代码,同时说明良好的编码做法(关闭扫描仪)。 它还使用以小写字母开头的变量的通用命名约定,但是您当然可以使用所需的任何约定。

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

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM