我有一个包含以下内容的文本文件:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>
<div ng-app="app">
<div>
<wrapped-input focus-on-event="event1"></wrapped-input>
<button click-triggers="event1">Trigger 'event1'</button>
</div>
<div>
<input type="text" focus-on-event="event2" placeholder="native input">
<button click-triggers="event2">Trigger 'event2'</button>
</div>
</div>
我写下了java中的代码,它将读取此文本文件的内容并区分3种数据类型。我使用了try catch语句,我的代码工作(有点)。唯一的问题是它将任何整数转换为双数。例如,以下是我的代码输出的内容:
Hello
1
2
3
4
5.6
LOL
23.5
34.6
23
456
Rofl.
我想防止这种情况发生。任何建议将不胜感激。
List of integers in the textfile: [1, 2, 3, 4, 23, 456]
List of doubles in the textfile: [1.0, 2.0, 3.0, 4.0, 5.6, 23.5, 34.6, 23.0, 456.0]
List of Strings in the textfile: [Hello, 5.6, LOL, 23.5, 34.6, Rofl]
答案 0 :(得分:1)
在收到每个令牌时尝试以下操作:
int
- 如果通过则不会尝试将其解析为int
或String
。double
。如果通过,请不要尝试将其解析为String
。String
。在每次先前的解析尝试失败时,删除将数据添加到String数据集的代码。
答案 1 :(得分:1)
将您的双重检查放入catch块以进行整数检查
try {
Integer.parseInt(s);
data_int.add(Integer.parseInt(s));
} catch(NumberFormatException e) {
try {
Double.parseDouble(s);
data_double.add(Double.parseDouble(s));
} catch(NumberFormatException e) {
data_String.add(s);
}
}
答案 2 :(得分:0)
我认为以下内容适合您。
while(file.hasNext()){
String s=file.next();
System.out.println(s);
try
{
try
{
Integer.parseInt(s);
data_int.add(Integer.parseInt(s));
}
catch(NumberFormatException e){
//do nothing
}
Double.parseDouble(s);
data_double.add(Double.parseDouble(s));
}
catch(NumberFormatException e){
data_String.add(s);
}
}
答案 3 :(得分:0)
不是调用parseInt
或parseDouble
然后处理异常,也许最好使用带有String#matches
的正则表达式来查看值是否看起来像整数或者双。例外情况是在正常流量之外发生的特殊情况;您不想使用它们来控制程序的常规流程。由于可以期望存在非数值,因此最好检查该值并查看其“看起来像”。
要查看它是否为整数,您只需使用-?\\d+
即可。
对于双打,请使用正则表达式-?\\d*\\.\\d+
。这甚至会匹配.5
形式的字符串。
如果这些都不匹配,则可能是一个字符串。
答案 4 :(得分:0)
使用嵌套的Try Catch Block:
while (file.hasNext()) {
String s = file.next();
System.out.println(s);
try {
Integer.parseInt(s);
data_int.add(Integer.parseInt(s));
} catch (Exception e) {
try {
Double.parseDouble(s);
data_double.add(Double.parseDouble(s));
} catch (Exception e1) {
// TODO Auto-generated catch block
data_String.add(s);
}
}
}