Java 读取数据混合到不同的数组中



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

我试过做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];
   }
}
while(scan.hasNext())
            {
                System.out.print("Letter is" +scan.next());
                System.out.println("Number is"+Double.parseDouble(scan.next()));    
            }

如果在 next () 之后使用 nextLine () 方法,那么它将返回数字以及字母和数字之间的空格。因此,请使用trim()方法来删除空格或next()来代替nextLine()

import java.util.*;
import java.io.*;
public class HelloWorld{
 public static void main(String []args) throws IOException{
    Scanner s = null;
    String str = "FH45 36.266nMF18 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+" ");
        }
    }
 }
}

认为您用BufferedReader读取所有文件,并像我对Mylines所做的那样ArrayArrayList将其删除: 希望以下代码对您有所帮助

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));
       }
    }

对于此特定示例,请使用 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 对象从字符串中轻松读取接下来的两个数字。

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

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();
   }
  }
}

最新更新