2017-02-25 7 views
-2

電話番号を覚えやすくするために、電話番号を表示するために文字を使用する企業もあります。例えば、手紙を使用して、電話番号438-5626は貸出金を得ることができます。 文字で表された電話番号を入力するように指示するプログラムを作成し、対応する電話番号を数字で出力します。ユーザーが7文字以上を入力した場合、最初の7文字のみを処理します。また、3桁目の後に - (ハイフン)を出力します。ユーザーは大文字と小文字の両方、および単語間のスペースの両方を使用できます。スペースを無視するにはどうすればよいですか?

スペースを無視するようにするにはどうすればよいか分かりません。 また、私はプログラミングに新しいです、助けてください、ありがとう!

私は入力しました:私は入力としてJavaプログラミングが大好きですが、スペースを無視しません。 Javaプログラミングを入力しても問題ありません。最初の単語は4文字です。それは勝っただけでなく、ハードコーディングされた8つの文字(」、あなたが入力文字列全体をループすることをお勧めします

for(int i = 0; i < 8; i++) 

:あなたはほとんどを除いて、それを持っ

import java.util.Scanner; 
public class assignment1Q3{ 
public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    String hpletters; 
    char hpdigits; 

    System.out.print("\nEnter phone number in letters only: "); 

    hpletters = input.nextLine(); 
    for(int i = 0; i < 8; i++) 
    { 
     hpdigits = hpletters.charAt(i); 
     if(i==3) 
     System.out.print("-"); 
     if(hpdigits >= 'A' && hpdigits <= 'Z' || hpdigits >= 'a' && hpdigits <= 'z') 
     { 
      switch(hpdigits) 
      { 
       case 'A': 
       case 'a': 
       case 'B': 
       case 'b': 
       case 'C': 
       case 'c': 
        System.out.print("2"); 
        break; 
       case 'D': 
       case 'd': 
       case 'E': 
       case 'e': 
       case 'F': 
       case 'f': 
        System.out.print("3"); 
        break; 
       case 'G': 
       case 'g': 
       case 'H': 
       case 'h': 
       case 'I': 
       case 'i': 
        System.out.print("4"); 
        break; 
       case 'J': 
       case 'j': 
       case 'K': 
       case 'k': 
       case 'L': 
       case 'l': 
        System.out.print("5"); 
        break; 
       case 'M': 
       case 'm': 
       case 'N': 
       case 'n': 
       case 'O': 
       case 'o': 
        System.out.print("6"); 
        break; 
       case 'P': 
       case 'p': 
       case 'Q': 
       case 'q': 
       case 'R': 
       case 'r': 
       case 'S': 
       case 's': 
        System.out.print("7"); 
        break; 
       case 'T': 
       case 't': 
       case 'U': 
       case 'u': 
       case 'V': 
       case 'v': 
        System.out.print("8"); 
        break; 
       case 'W': 
       case 'w': 
       case 'X': 
       case 'x': 
       case 'Y': 
       case 'y': 
       case 'Z': 
       case 'z': 
        System.out.print("9"); 
        break; 
      } 
     } 
    } 
    System.out.println(); 
} 
} 
+0

これは、正確に質問を投稿するのに役立ちますhttp://stackoverflow.com/help/how-to-askをお読みください –

答えて

0

あなたの入力にちょうど1つのスペースが含まれていない場合は、ハードコードされているようです)。それ以外の場合は、入力文字列が正確に8文字でない場合に問題が発生します(コードをテストして問題を発見することができます)。

そして:入力場合

あり
if(i==3) 
    System.out.print("-"); 

iが処理された入力文字の数を表し、印刷された数字、およびこれら二つのない数が同じではありませんスペースを含みます。だから、の3桁を出力した後でハイフンを印刷する方法を見つけたいと思うでしょう。

0

あなたは、以下のような空白を削除することができ

String str = "i love java programming"; 
str = str.replace(" ", ""); 
0

だけのスペースを無視するには、あなたがそれらを置き換えることができます。

ただし、最初の一歩とあなたの三つの主要な問題にあなたのコードを煮詰める必要があります。

  1. あなたはユーザー入力を持っているので、あなたはそれを検証する必要があります。
  2. 文字は無視してください(空白)したり、他の文字(下と上)と同じように扱う必要があります。
  3. 文字をハイフンで数字に変換する必要があります。

このようなコードを整理すると、解決する小さな問題が発生します。また、コードがコメントにさらなる文書化なしで何をするのかは明らかです。さらに、いくつかのケースを "無視"するため、いくつかのコードを脇に置くことができます。

public class Assignment1Q3 { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     System.out.print("\nEnter phone number in letters only: "); 
     String hpletters = input.nextLine(); 

     if (isValid(hpletters)) { 
      String normalizedHpletters = normalize(hpletters); 
      String transformedNumber = transformToNumberWithLength(normalizedHpletters, 7); 
      System.out.println("The phone number is: " + transformedNumber); 
     } 
    } 

    private static String transformToNumberWithLength(String hpletters, int length) { 
     StringBuffer sb = new StringBuffer(length); 
     for (int i = 0; i < length; i++) { 
      char hpletter = hpletters.charAt(i); 
      if (i == 3) { 
       sb.append("-"); 
      } 
      if (hpletter >= 'A' && hpletter <= 'Z') { 
       switch (hpletter) { 
        case 'A': 
        case 'B': 
        case 'C': 
         sb.append("2"); 
         break; 
        case 'D': 
        case 'E': 
        case 'F': 
         sb.append("3"); 
         break; 
        case 'G': 
        case 'H': 
        case 'I': 
         sb.append("4"); 
         break; 
        case 'J': 
        case 'K': 
        case 'L': 
         sb.append("5"); 
         break; 
        case 'M': 
        case 'N': 
        case 'O': 
         sb.append("6"); 
         break; 
        case 'P': 
        case 'Q': 
        case 'R': 
        case 'S': 
         sb.append("7"); 
         break; 
        case 'T': 
        case 'U': 
        case 'V': 
         sb.append("8"); 
         break; 
        case 'W': 
        case 'X': 
        case 'Y': 
        case 'Z': 
         sb.append("9"); 
         break; 
       } 
      } 
     } 
     return sb.toString(); 
    } 

    private static String normalize(String hpletters) { 
     return hpletters 
       .toUpperCase()   // only upper case 
       .replaceAll(" ", ""); // remove spaces 
    } 

    private static boolean isValid(String input) { 
     if (!(input.replace(" ", "").length() > 6)) { 
      System.out.println("Please enter at least 7 characters (ignoring spaces)."); 
      return false; 
     } 

     if (!input.matches("[A-Za-z ]+")) { 
      System.out.println("Please enter letters a-z only."); 
      return false; 
     } 
     return true; 
    } 
} 
関連する問題