[英]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.