2016-09-27 32 views
2

我希望標題有意義。對不起,我是一名學生參加一個cs班,我們正在使用java,而且我似乎無法正確使用這部分程序。所以我們正在編寫一個程序,要求一個人提供他們的姓名和地址,並將這些信息插入他們在郵件中收到的垃圾郵件信件中。到目前爲止我所擁有的是如何從一個輸入的答案中拉出一定數量的信息

String name; 
    Scanner scan = new Scanner(System.in); 
    System.out.println ("Enter name: "); 
    name = scan.nextLine(); 

    String add; 
    System.out.println ("Enter street address: "); 
    add = scan.nextLine(); 

    String add2; 
    System.out.println ("Enter city, state abbreviation and zip code: "); 
    add2 = scan.nextLine(); 

    System.out.println (" "); 
    System.out.println (" "); 
    System.out.println ("Dear " + name + ","); 
    System.out.println (" Congratulations! You are a finalist in a sweepstakes to win "); 
    System.out.println ("$1,000,000! You may soon be the richest of your neighbors on "); 
    System.out.println (add.substring(4) + "! You will be the talk of " + add2.substring(0,13) + ". To claim your "); 
    System.out.println ("prize simply return the enclosed envelope. " + name.substring(4,7).toUpperCase() + ", DO NOT PASS UP THIS"); 
    System.out.println ("FABULOUS OFFER!"); 
    System.out.println(" "); 
    System.out.println ("Sincerely, "); 
    System.out.println ("I. M. Aswindler"); 
    System.out.println ("Sweepstakes Coordinator"); 
    System.out.println (""); 

基本上我需要做的就是拔出某些信息並將其插入信件。我使用子字符串工作,但只有在使用特定名稱時纔有效。我需要它能夠拉先生/先生。出於他們所輸入的內容,能夠拉出街道名稱(沒有門牌號碼)等等。我希望這是有道理的,我希望有人能夠幫助我。我試圖弄清楚它有很多麻煩。謝謝!

+1

看看正則表達式。 – Taylor

+0

你可以使用string.split()來分解姓氏和名字。你也可以用它來分解一個地址。 –

回答

1

有幾件事。

在這樣的小程序的頂部聲明你的變量。使其更具可讀性。

String name, add, city, state, zip 對不起,這是我的個人偏好,不知道它的標準。

您可以通過單獨詢問每條信息輕鬆解決此問題。請求並將它們全部放入它們自己的字符串變量中,然後在輸出中調用字符串。 但是,您也可以使用trim()replaceAll來使其程序幾乎可以處理任何輸入。我會告訴你我的意思是爲了名稱和地址。

名稱:

你應該小心爲空白。如果我運行你的程序並把 ' firstname lastname作爲輸入,結果是Dear firstname lastname,,這很醜陋。 你可以.trim()你的scan.nextline(),使它擺脫開始和結束空白。

您也可以使用replaceAll來擺脫名字和姓氏之間的空白。例如

' FirstName Lastname ' 將輸出到Dear FirstName LastName如果使用name = ((scan.nextLine()).trim()).replaceAll("()+", " ");

地址

您使用子和索引的方式是有點亂。理想情況下,你要再次辦理空格,長號碼等 ,剪裁用

VarName = ((scan.nextLine()).trim()).replaceAll("()+", " ");

然後,要隔離的街道名稱正確的所有空白?您可以通過搜索街道號碼和街道地址之間的空格來完成此操作。你可以通過使用add.substring(add.indexOf(" ")+1,add.length())

如果你將它設置爲一個var,比如說streetName,它將從第一個空間開始(+1,因此它實際上是從街道名稱的第一個字符開始的)並且將所有到字符串末尾的方式。

例輸入:38 Banana Court

如果你打電話System.out.println("$1,000,000! You may soon be the richest of your neighbors on " + streetName);

輸出:Banana Court

其餘

我覺得你可以自己解決的休息。除非你想花更多的時間來處理子串,否則可能最好是分別調用City,State和Zipcode。請記住使用trim和replaceAll來擺脫空白。

繼承人一個示例程序,應該告訴你我在說什麼。

String name, address, streetName, city, state, zip; Scanner scan = new Scanner(System.in); System.out.println("What is your name?"); name = ((scan.nextLine()).trim()).replaceAll("()+", " "); System.out.println(name); System.out.println("What is your address?"); address = ((scan.nextLine()).trim()).replaceAll("()+", " "); streetName = address.substring(address.indexOf(" ")+1,address.length()); System.out.println("Your Street Address is :" + streetName);

運行它,嘗試用空格和這樣的投入。它應該可以幫助你快速完成休息。

+0

好東西。除了變量聲明。這不是一個Pascal,所以直接定義並初始化它們會更清楚,比如'String name = scan.nextLIne()。trim()。replaceAll(「\\ s +」,「」);' 雖然Demeter可能有話要說... –

+1

@KoosGadellaa對不起。頂部的變量是我個人對這種短程序的偏好,我可以看到爲什麼它在其他地方是不可接受的。 –

相關問題