这是我已实现的代码,但我以增量顺序获取多个数据数组,但我需要单个数据数组。我该如何处理?也可以尝试捕获catch块吗?
Text File:
The 1493 fox 0.4 -6.382 jumped -832722 0 1 9E-21 162 over the dog!
例如:每次添加数据时都会打印双值。
@SuppressWarnings("resource")
Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+");
ArrayList<Long> itr= new ArrayList<Long>();
ArrayList<Double> dub = new ArrayList<Double>();
ArrayList<String> str = new ArrayList<String>();
while(s.hasNext())
{
String str1=s.next();
try
{
long b=Long.parseLong(str1);
itr.add(b);
System.out.println("Integer values are ::"+itr);
}
catch(NumberFormatException e)
{
try
{
double b1=Double.parseDouble(str1);
dub.add(b1);
System.out.println("Double values are ::"+dub);
}
catch(NumberFormatException e1)
{
String b2 = (String) str1;
str.add(b2);
System.out.println("String Values are"+str);
}
}
}
}}
预期产出:
Integer values are ::[1493, -832722, 0, 1]
Double values are ::[0.4, -6.382, 9.0E-21]
String Values are[The, fox, jumped, over, the, dog!]
答案 0 :(得分:4)
当@RubioRic回答时,将SOP语句移到while循环之外以获得所需的输出。
至于获取数据类型的其他方法,我觉得您的实现已经足够好并且被广泛使用。但是,如果您想以另一种方式执行此操作,请尝试使用正则表达式模式来验证字符串并确定数据类型(不可靠)或使用Scanner类API来确定数据类型,如下所示。
@SuppressWarnings("resource")
Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+");
ArrayList<Long> itr= new ArrayList<Long>();
ArrayList<Double> dub = new ArrayList<Double>();
ArrayList<String> str = new ArrayList<String>();
while(s.hasNext())
{
if(s.hasNextLong()){
itr.add(s.nextLong());
}
else if(s.hasNextDouble()){
dub.add(s.nextDouble());
}
else{
str.add(s.next());
}
}
s.close();
System.out.println("Long values are ::" + itr);
System.out.println("Double values are ::" + dub);
System.out.println("String Values are" + str);
答案 1 :(得分:1)
只需在循环外移动打印。没有使用try-catch,没有更好的解决方案,抱歉。
@SuppressWarnings("resource")
Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+");
ArrayList<Long> itr = new ArrayList<Long>();
ArrayList<Double> dub = new ArrayList<Double>();
ArrayList<String> str = new ArrayList<String>();
while(s.hasNext()) {
String str1=s.next();
try {
long b=Long.parseLong(str1);
itr.add(b);
} catch(NumberFormatException e) {
try {
double b1=Double.parseDouble(str1);
dub.add(b1);
} catch(NumberFormatException e1) {
String b2 = (String) str1;
str.add(b2);
}
}
}
System.out.println("Integer values are ::" + itr);
System.out.println("Double values are ::" + dub);
System.out.println("String Values are" + str);