如何从文本文件中分离数据类型?

时间:2016-04-13 04:02:34

标签: java

这是我已实现的代码,但我以增量顺序获取多个数据数组,但我需要单个数据数组。我该如何处理?也可以尝试捕获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!]

2 个答案:

答案 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);