验证并将输入发送到文本doc

时间:2012-03-07 16:20:20

标签: java java.util.scanner

我有一个java程序,我从用户那里收集条目。提示用户输入姓名,电话号码和电子邮件地址。 当我输入全名(即:Mike Smith)时,程序只保留名字。当它将电子邮件地址和电话号码发送到文本文档时,它们将被交换,因此电子邮件地址位于电话号码部分,电话号码位于电子邮件地址部分。

以下是我主要从用户那里获取信息的部分

                String name = Validator.getEntry(ip, "Enter name: ");
                String email = Validator.getEntry(ip, "Enter email address");
                String phone = Validator.getEntry(ip, "Enter phone number: ");
                AddressBookEntry newEntry = new AddressBookEntry(name, email, phone);
                AddressBookIO.saveEntry(newEntry);

以下是验证条目

的验证器类的部分
public static String getEntry(Scanner ip, String prompt)
{

    System.out.println(prompt);
    String e = ip.next();
    ip.nextLine();
    return e;
}

我尝试通过取消验证器并输入

来解决此问题
    system.out.println("Enter name:");
    name = ip.next();

等电子邮件和电话,但我得到的结果与通过验证器类运行相同。我对接下来要检查的内容感到困惑。我做了什么有什么不对吗?

这是我的AddressBookEntry clas

     public class AddressBookEntry 
    {
private String name;
private String emailAddress;
private String phoneNumber;

public AddressBookEntry()
{
    name = "";
    emailAddress = "";
    phoneNumber = "";
}

public void setName(String name)
{
    this.name = name;
}

public String getName()
{
    return name;
}

public void setEmailAddress(String emailAddress)
{
    this.emailAddress = emailAddress;
}

public String getEmailAddress()
{
    return emailAddress;
}

public void setPhoneNumber(String phoneNumber)
{
    this.phoneNumber = phoneNumber;
}

public String getPhoneNumber()
{
    return phoneNumber;
}

public AddressBookEntry(String newname, String newphone, String newemail)
{
    name = newname;
    emailAddress = newemail;
    phoneNumber = newphone;
}
    }

这是我的IO类

    import java.io.*;

    public class AddressBookIO
    {
private static File addressBookFile = new File("address_book.txt");
private static final String FIELD_SEP = "\t";
private static final int COL_WIDTH = 20;

// use this method to return a string that displays
// all entries in the address_book.txt file
public static String getEntriesString()
{
    BufferedReader in = null;
    try
    {
        checkFile();

        in = new BufferedReader(
             new FileReader(addressBookFile));

        // define the string and set a header
        String entriesString = "";
        entriesString = padWithSpaces("Name", COL_WIDTH)
            + padWithSpaces("Email", COL_WIDTH)
            + padWithSpaces("Phone", COL_WIDTH)
            + "\n";

        entriesString += padWithSpaces("------------------", COL_WIDTH)
            + padWithSpaces("------------------", COL_WIDTH)
            + padWithSpaces("------------------", COL_WIDTH)
            + "\n";

        // append each line in the file to the entriesString
        String line = in.readLine();
        while(line != null)
        {
            String[] columns = line.split(FIELD_SEP);
            String name = columns[0];
            String emailAddress = columns[1];
            String phoneNumber = columns[2];

            entriesString +=
                padWithSpaces(name, COL_WIDTH) +
                padWithSpaces(emailAddress, COL_WIDTH) +
                padWithSpaces(phoneNumber, COL_WIDTH) +
                "\n";

            line = in.readLine();
        }
        return entriesString;
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();
        return null;
    }
    finally
    {
        close(in);
    }
}

// use this method to append an address book entry
// to the end of the address_book.txt file
public static boolean saveEntry(AddressBookEntry entry)
{
    PrintWriter out = null;
    try
    {
        checkFile();

        // open output stream for appending
        out = new PrintWriter(
              new BufferedWriter(
              new FileWriter(addressBookFile, true)));

        // write all entry to the end of the file
        out.print(entry.getName() + FIELD_SEP);
        out.print(entry.getEmailAddress() + FIELD_SEP);
        out.print(entry.getPhoneNumber() + FIELD_SEP);
        out.println();
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();
        return false;
    }
    finally
    {
        close(out);
    }
    return true;
}

// a private method that creates a blank file if the file doesn't already exist
private static void checkFile() throws IOException
{
    // if the file doesn't exist, create it
    if (!addressBookFile.exists())
        addressBookFile.createNewFile();
}

// a private method that closes the I/O stream
private static void close(Closeable stream)
{
    try
    {
        if (stream != null)
            stream.close();
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();
    }
}

// a private method that is used to set the width of a column
private static String padWithSpaces(String s, int length)
{
    if (s.length() < length)
    {
        StringBuilder sb = new StringBuilder(s);
        while(sb.length() < length)
        {
            sb.append(" ");
        }
        return sb.toString();
    }
    else
    {
        return s.substring(0, length);
    }
}

}

1 个答案:

答案 0 :(得分:2)

Scanner.next()将一次读取一个单词,这就是为什么它只读取名字。如果您想要整行,请使用Scanner.nextLine()

System.out.println(prompt);
String e = ip.nextLine();
return e;