JTextField – 数字分隔(ArrayList)

有没有办法使用JTextField获取几个不同的数字?

例如,给出以下数值:2.0,3.0,4.0。 我想将它们分别放入ArrayList中。

如何处理错误的输入数据以继续输入?

//in this case the resulst is "arList: 1.92239991" textField = new JTextField("1.9, 223, 9991"); textField.addActionListener(this); ArrayList arList = new ArrayList(); String str = textField.getText(); String result = str.replaceAll("\\s+",""); String otherResult = result.replaceAll(",",""); double d = Double.parseDouble(otherResult); System.out.println(d); arList.add(d); for (Double anArList : arList) { System.out.println("arList: " +anArList); } 

如果数字始终用数字分隔,可以使用String#split ,它将返回一个值数组。

 String str = textField.getText(); String[] parts = str.split(","); 

这将返回包括空格之间的每个值。 然后你可以修剪这些结果……

 for (int index = 0; index < parts.length; index++) { parts[index] = parts[index].trim(); } 

现在这将只包含剩余的文本。 如果你必须在列表中,你可以使用...

 List values = Arrays.asList(parts); 

如果你需要它作为Double的列表,你将需要单独解析每个元素...

 List values = new ArrayList(parts.length); for (String value : values) { values.add(Double.parseDouble(value)); } 

如果任何一个值不是有效的Double这仍将抛出一个解析exception。

更好的解决方案可能是使用JFormattedTextFieldJSpinner来收集单个值,并将每个值一次添加到一个列表中(可以在JList显示它们),这将允许您在输入时validation每个值。

有关更多详细信息,请参阅如何使用格式化文本字段 , 如何使用旋转器以及如何使用列表

如果格式是固定的,那么你可以使用String.split():

 String text = "1.9, 223, 9991"; for (String s: text.split("\\,\\s")) { double d = Double.parseDouble(s); System.out.println(d); }