Java将混合数据读入不同的数组

时间:2014-02-26 18:52:52

标签: java arrays java.util.scanner

我试图让扫描仪从外部数据文件,字母和数字中读取并将它们插入单独的数组中。我需要将前两个字母分成不同的数组,并将两个数字中的每一个分成不同的数组,我在这方面遇到了一些麻烦。

我尝试过Scanner.nextScanner.nextLine并对其进行解析,但似乎没有用,有人能给我一个正确方向的推动吗?

数据文件如下所示

FH45 36.266

MF18 46.967

MH29 33.309

MT95 36.983

MR30 23.1768

FF31 42.55

FF65 39.96

FT50 30.962

FR80 19.375

MH36 24.017

QF40 30

MQ40 30

到目前为止,这是我的代码,我只有阵列,我想把四个不同的东西分成四个不同的数组,我不想打印任何东西。

import java.io.*;
import java.util.*;
public class Height
{
    public static void main(String[]args) throws IOException
   {
       Scanner inFile = new Scanner(new FileInputStream("info.dat"));
       char Bone[] = new char[12];
       char Gender[] = new char[12];
       int Age[] = new int[12];
       double Length[] = new double[12];

   }
}

5 个答案:

答案 0 :(得分:0)

while(scan.hasNext())
            {
                System.out.print("Letter is" +scan.next());
                System.out.println("Number is"+Double.parseDouble(scan.next()));    
            }

如果您在nextLine()之后使用next()方法,则会返回数字以及字母和数字之间的空格。因此,请使用trim()方法删除空格或next()取代nextLine()

答案 1 :(得分:0)

import java.util.*;
import java.io.*;

public class HelloWorld{
 public static void main(String []args) throws IOException{
    Scanner s = null;
    String str = "FH45 36.266\nMF18 46.967";
    ArrayList<String> array1 = new ArrayList<String>();
    ArrayList<Double> array2 = new ArrayList<Double>();
    try {
        //uncomment this line for file
        //s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));
        s = new Scanner(new BufferedReader(new StringReader(str)));

        while (s.hasNext()) {
            String token = s.next();
            try{  
                double d = Double.parseDouble(token);
                array2.add(d);
            }  
            catch(NumberFormatException nfe){
                array1.add(token);
            }  
        }
    } finally {
        if (s != null) {
            s.close();
        }

        System.out.println("Printing Letter Array ");
        for(String out: array1){
            System.out.print(out+" ");
        }

        System.out.println("\nPrinting Numeric Array");
        for(Double out: array2){
            System.out.print(out+" ");
        }
    }
 }

}

答案 2 :(得分:0)

我假设您只想打印包含字符和整数的部分。在这种情况下,我认为您可以使用以下方法: -

import java.util.*;
public class Demo
{
 public static void main(String[] args)
 {
   ArrayList<Integer> Int = new ArrayList<Integer>();
   ArrayList<Double> duble = new ArrayList<Double>();
   ArrayList<Character> FirstChar = new ArrayList<Character>();
   ArrayList<Character> SecondChar = new ArrayList<Character>();

   try
   {
    Scanner scan = new Scanner(new BufferedReader(new FileReader(filepath)));
    while(scan.hasNext())
    { 
      String str = scan.nextLine();
      FirstChar.add(str.charAt(0));
      SecondChar.add(str.charAt(1));
      Int.add(Integer.parseInt(str.substring(2,4)));
      duble.add(Double.parseDouble(str.substring(5)));
      scan.next();
    }

    for(Integer I:Int)
       System.out.print(I.intValue()+"\t");
    System.out.println();

    for(Double d:duble)
        System.out.print(d.doubleValue()+"\t");
    System.out.println();

    for(Character Char:FirstChar)
       System.out.print(Char.charValue()+"\t");
    System.out.println();

    for(Character Char:SecondChar)
       System.out.print(Char.charValue()+"\t");
    System.out.println();
   }
   catch(Exception e)  
   {
     e.printStackTrace();
   }
   finally{
     scan.close();
   }
  }
}

答案 3 :(得分:0)

考虑使用BufferedReader阅读所有文件并将其存储在ArrayArrayList中,就像我对mylines一样:希望以下代码可以帮助您

void doMyJob(){
       String[] mylines=new String[]{ "FH45 36.266","MF18 46.967","MH29 33.309",
                                      "MT95 36.983","MR30 23.1768",
                                      "FF31 42.55","FF65 39.96",
                                      "FT50 30.962","FR80 19.375",
                                      "MH36 24.017","QF40 30",
                                      "MQ40 30"};
       ArrayList<String> data1 = new ArrayList<String>();
       ArrayList<String> data2 = new ArrayList<String>();
       for(int i=0; i<mylines.length; i++){
           //for FIRST two letters
           data1.add(mylines[i].substring(0,2));
           //So on as you want..


           //for VALUES
           String[] raw = mylines[i].split("\\s");
           data2.add(raw[1]);
       }
       for(int i=0; i<mylines.length; i++){
           System.out.println(data1.get(i));
       }
       for(int i=0; i<mylines.length; i++){
           System.out.println(data2.get(i));
       }
    }

答案 4 :(得分:0)

对于此特定示例,请使用Scanner.nextLine()将整行读入String对象。

接下来,使用String.charAt(n)方法将前两个字符读入第一个和第二个字段:

String letter1 = lineStringFromFile.charAt(0);
String letter2 = lineStringFromFile.charAt(0);

接下来,截断从文件中读取的行中的前两个字母:

listStringFromFile = lineStringFromFile.substring(2, lineStringFromFile.length());

接下来,为字符串创建一个扫描程序:

Scanner myScanner = new Scanner(listStringFromFile);

现在,由于字符串包含由空格分隔的两个数字,因此您可以使用Scanner对象从字符串中读取接下来的两个数字。