1

我正在尝试从包含名称和双打的文件中读取,如果它是名字,姓氏然后是双打,这将很容易,但有些行有一个中间首字母,有些只有一个名字。
像这样:
Hancock John 40.00 9.75
Light Karen L 40.00 9.60
Bob 12.02 42.90
等等 我将名称放入字符串数组,将数字放入二维数组。那么我将如何分离这些数据类型呢?编辑:我起初正在尝试这个

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

            }

            }

这根本不起作用。从那时起,我一直在搜索谷歌并重新阅读我的 java 书。很抱歉格式化,它不是被剪切/粘贴友好的,上次我在准备好之前点击输入它发布:(

4

2 回答 2

1

您可能采用了另一种方法。无论如何,我给你一个简单的技巧来解决它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();
        }
    }
于 2013-08-01T09:23:13.947 回答
1

你熟悉扫描仪吗?

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

有一个链接,或者只是谷歌Java.Util.Scanner。

我会Java.Util.Scanner用文件文本初始化 a,然后使用调用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
    }

}
于 2013-08-01T04:50:38.623 回答