区分Java中的不同数据类型

时间:2015-05-29 20:11:14

标签: java arraylist

我有一个包含以下内容的文本文件:

<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]

5 个答案:

答案 0 :(得分:1)

在收到每个令牌时尝试以下操作:

  1. 尝试将令牌解析为int - 如果通过则不会尝试将其解析为intString
  2. 如果失败,则尝试将令牌解析为double。如果通过,请不要尝试将其解析为String
  3. 如果失败则将令牌解析为String
  4. 在每次先前的解析尝试失败时,删除将数据添加到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)

不是调用parseIntparseDouble然后处理异常,也许最好使用带有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);
        }
    }

}