我有两个问题。
1, 2, 2.0, car, 3, 4,20, house, 7, 8.2, 19, movie, 3,1, 45
我需要将这些数字和单词分开,并将它们放入单独的列表中,但是仅当我使用.split(", ");
方法时它才有效,并且它不会将逗号后面没有空格的数字放入我的数字中清单。我的代码:
File file = new File(pathToFile);
br = new BufferedReader(new FileReader(file));
String str;
while ((str = br.readLine()) != null) {
data = str.split(", ");
}
for (String entry : data) {
try {
int number = Integer.valueOf(entry);
numbersList.add(number);
} catch (NumberFormatException e) {
wordsList.add(entry);
}
}
System.out.println(numbersList);
System.out.println(wordsList);
我在某处读到.split();
方法会自动忽略空白,但是事实并非如此,因为我得到了以下输出:
numbersList - 1, 2, 3, 7, 19, 45
wordsList - 2.0, car, 4,20, house, 8.2, movie, 3,1
我需要帮助将浮点数与单词分开。到目前为止,我已经尝试过:
try {
int number = Integer.valueOf(entry);
float decimalNumber = Float.parseFloat(entry);
numbersList.add(number);
decimalNumbersList.add(decimalNumber);
} catch (NumberFormatException e) {
wordsList.add(entry);
}
但是没有用。完全没有它将普通数字转换为浮点数。
decimalNumbersList - 1.0, 2.0, 24.0, 18.0, 1.0, 3.0, 20.0, 12.0, 8.0, 12.0
答案 0 :(得分:2)
使用正则表达式
data = str.split(", ?");
答案 1 :(得分:1)
基本上,您想为所有类型的元素创建单独的列表。我将使用以下方法为程序中的所有数据类型创建单独的列表:
for (String entry : data) {
if(isInteger(entry))
numbersList.add(Integer.valueOf(entry));
else if(isDouble(entry))
doublesList.add(Double.valueOf(entry));
else
wordsList.add(entry);
}
System.out.println(numbersList);
System.out.println(wordsList);
System.out.println(doublesList);
这是isInteger
和isDouble
函数的定义
boolean isInteger(String input){
try {
Integer.parseInt(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}
boolean isDouble(String input){
try {
Double.parseDouble(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}
替代方法
如果您可以使用Scanner
类进行阅读,那么使用hasNextInt
和nextInt
方法甚至会是一个简单的问题。
if (scanner.hasNextInt())
numbersList.add(scanner.nextInt());
else if (scanner.hasNextDouble())
doublesList.add(scanner.nextDouble());
else
wordsList.add(scanner.next());
要拆分,您可以按照其他答案中的建议使用str.split(", ?")
。
答案 2 :(得分:1)
对于第一部分,我决定简单地删除空白,然后使用“,”进行解析。但是还提出了其他好的方法,这些方法也很好。
要从字符串中分离浮点数,请检查每个数据条目,并检查其是否包含浮点分隔符(“。”)。如果是这样,请检查它是否为浮点并将其添加到数字列表中。请注意,numbersList
是ArrayList<Number>
。
public static void main(String[] args) throws Exception {
File file = new File("path");
BufferedReader br = new BufferedReader(new FileReader(file));
String str;
String[] data = null;
ArrayList<Number> numbersList = new ArrayList<>();
ArrayList<String> wordsList = new ArrayList<>();
//Remove white space and split by comma
while ((str = br.readLine()) != null) {
str = str.replaceAll(" ", "");
data = str.split(",");
}
assert data != null;
for (String entry : data) {
//check for floats
if(entry.contains(".")){
try {
//Check if we can parse
float d = Float.parseFloat(entry);
//Add to numbers list.
numbersList.add(d);
} catch (NumberFormatException e) {
e.printStackTrace();
}
//Else, handle the rest
} else {
try {
int number = Integer.valueOf(entry);
numbersList.add(number);
} catch (NumberFormatException e) {
wordsList.add(entry);
}
}
}
System.out.println(numbersList);
System.out.println(wordsList);
}