簡體   English   中英

Java從文件中讀取具有不同長度的多種數據類型的輸入

[英]java read input from file with multiple data types of varying lengths

我正在嘗試從包含名稱和雙打的文件中讀取內容,如果它是名字,姓氏然后是雙打,這會很容易,但是有些行的中間是縮寫,有些只有一個名字。
像這樣:
漢考克·約翰40.00 9.75
輕型Karen L 40.00 9.60
鮑勃12.02 42.90
依此類推,我將名稱放入字符串數組,將數字放入2d數組。 那么我該如何區分這些數據類型呢? 編輯:我剛開始嘗試

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

   public class JEdwards11 
    {
      public static void main(String[] args) throws Exception 
      {  PrintWriter outFile = new PrintWriter("H:/Java/program11.out");
           String filename = "H:/Java/program11.dat", line, fullname;
         StringTokenizer st;
         Scanner inFile = new Scanner(new FileReader(filename));
         int ctr = 0, i = 0, k = 0;
         String [] names = new String [30];//print vertically
         double [][] money = new double [7][30];//short across, long down
         //hours worked, hourly rate, gross pay, net pay, fed, state, union

            //while(inFile.hasNext())
            for(i=0; i< names.length; i++)
            {


            if(inFile.hasNextDouble())
            {money[1][i] = inFile.nextDouble();
             money[2][i] = inFile.nextDouble();}

            else
            names[i] = inFile.next();

            }


            /*while(inFile.hasNext())
            {line = inFile.nextLine();
            st = new StringTokenizer(line);
            names[i]=st.nextString;
            money[1][i] = st.nextDouble();
            money[2][i] = st.nextDouble();*/

            for(i=0;i<names.length;i++)


            for(i=0; i<names.length; i++)
            System.out.println("name = " + names[i] +" money1 = "+money[1][i]                                                                  +" money2= "+money[2][i]);

            inFile.close();
            outFile.close();

            }

            }

這根本沒有用。 從那時起,我一直在搜索Google並重新閱讀我的Java書籍。 對不起格式,它不被剪切/粘貼友好,上次我在准備好之前輸入的內容已被輸入:(

您熟悉Scanner嗎?

http://www.tutorialspoint.com/java/util/java_util_scanner.htm

有一個鏈接,或者只是google Java.Util.Scanner。

我將使用文件文本初始化Java.Util.Scanner ,然后使用對hasNextDouble()調用來確定下一個標記是否為雙hasNextDouble() 如果是這樣,請使用nextDouble對其進行掃描,否則將下一個標記視為名稱的一部分。

//psuedo code
Scanner s; // init with file
while ( s.hasNext() )
{
    if ( s.hasNextDouble() )
    {
        double d = s.nextDouble();
        // add to array
    }
    else
    {
        String name = s.next();
        // add to names
    }

}

您可能遵循了另一種方法。 無論如何,我給您一個簡單的技巧來使用Scanner解決它,只需將令牌添加到緩沖區中直到遇到數字,然后將其分配給名稱數組。

同樣,您的if-else塊是錯誤的,因為每次迭代都會執行if-part或else-part。 嘗試這樣的事情,它肯定會解決您的問題:

for (i = 0; i < names.length; i++) {
        StringBuffer sbr = new StringBuffer();

        while (inFile.hasNext("[a-zA-Z]+")) {
            sbr.append(inFile.next() + " ");
        }
        names[i] = sbr.toString().trim();

        if (inFile.hasNextDouble()) {
            money[1][i] = inFile.nextDouble();
            money[2][i] = inFile.nextDouble();
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM