将字符串中的字母替换为数字,具体取决于具有Character类的字母

时间:2016-11-29 05:28:47

标签: java loops switch-statement character charat

我正在尝试编写一个程序,接受带有字母的电话号码,并输出所有数字的电话号码。替换字母的数字由以下键确定。

void texter (char* a) { }

所以,如果我收到了电话号码:

0 = none | 1 = none | 2 = ABC
3 = DEF  | 4 = GHI  | 5 = JKL
6 = MNO  | 7 = PQRS | 8 = TUV
         | 9 = WXYZ |

输出结果为:

1-800-KILLERS

这是我到目前为止所拥有的。我还没有写出switch语句的所有情况,但是它们都是第一种情况,即a,b和c。

1-800-545-5377 

5 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {
        Scanner stdin = new Scanner(System.in);
        System.out.println("Programmed By Jason Silva");
        System.out.println();
        System.out.println("Enter a phone number or quit to exit");
        String number = stdin.nextLine();
        System.out.println(getNumber(number));
        stdin.close();
    }

    public static String getNumber(String numString) {
        StringBuilder numStrBuilder = new StringBuilder(); // I used StringBuilder because String is Immutable.
        for (int i = 0; i < numString.length(); i++) {
            char tempChar = numString.toUpperCase().charAt(i); // declared it to block variable for ease of use.
            if (Character.isLetter(tempChar)) {
                switch (tempChar) {
                case 'A':
                case 'B':
                case 'C':
                numStrBuilder.append("2"); // Append this value to StringBuilder if the character is a Letter.
                    break;
                case 'D':
                case 'E':
                case 'F':
                numStrBuilder.append("3");
                    break;
                case 'G':
                case 'H':
                case 'I':
                numStrBuilder.append("4");
                    break;
                case 'J':
                case 'K':
                case 'L':
                numStrBuilder.append("5");
                    break;
                case 'M':
                case 'N':
                case 'O':
                numStrBuilder.append("6");
                    break;
                case 'P':
                case 'Q':
                case 'R':
                case 'S':
                numStrBuilder.append("7");
                    break;
                case 'T':
                case 'U':
                case 'V':
                numStrBuilder.append("8");
                    break;
                case 'W':
                case 'X':
                case 'Y':
                case 'Z':
                numStrBuilder.append("9");
                    break;
                }
            } else {
                numStrBuilder.append(tempChar); // Append the current character if it's not a letter.
            }

            if(i==8) {
                numStrBuilder.append("-"); // Append 'dash' whenever it reaches the 8th element of the String for formatting.
            }
        }
        return numStrBuilder.toString(); // Return it to String because you can't have character like 'dash' in a int.
}

试试这个。它会工作。我使用StringBuilder作为@ScaryWombat说因为Stringimmutable,这意味着如果你同时concat多个字符串,就会浪费很多内存分配。

答案 1 :(得分:0)

您拥有正确创建的功能

创建一个字符串

String str = "";

如果String处的字符是一个数字而不是通过switch case

if (Character.isLetter(i) ) {

            switch (num.charAt(i)) {

            case 'A':
            case 'B':
            case 'C':
                str  += "2" ;
                break;

else

str += number.charAt(i);

我认为这应该可以正常使用

PS:将你的返回类型更改为字符串,但如果你想将它作为一个数字,你可以在一个循环中调用该函数并一次发送一个字符以获得一个整数,而不是在函数内创建一个循环

答案 2 :(得分:0)

使用地图并通过转化流式传输字符:

public void tick(){
    if(handler.getKeyManager().restart)
       try {
          restartGame();
    } catch(Exception ioe){
           System.out.print("Error."); }
    if(handler.getKeyManager().exit)
        System.exit(0);
}    

此(1行)方法仅转换字母,保留所有非字母字符,如数字,空格,连字符,括号等,这些都是输入电话号码时常用的。

请注意,private static Map<Integer, Integer> map = new HashMap<Integer, Integer>() {{ put('A', '2'); put('B', '2'); // etc for C through Y put('Z', '9'); }}; static String toNumbers(String input) { return input.chars() .map(c -> map.getOrDefault(c, c)) .mapToObj(c -> String.valueOf((char)c)) .collect(Collectors.joining()); } 会返回chars()(而不是您所期望的IntStream。)

答案 3 :(得分:0)

@Jason_Silva您可以查看下面的代码,它将适用于上述说明中提到的所有条件和所有类型的输入。

  public class Demo2
  {
  static int i;
  static String str1;
  public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  System.out.println("Enter a series");
  String data=sc.nextLine();
  System.out.println(mtd(data));
  }

  public static String mtd(String str){
  for( i=0;i<str.length();i++){
    if(i==9){
        str=str.substring(0,9)+"-"+str.substring(9,str.length());
    }
    if(str.charAt(i)=='A'||str.charAt(i)=='B'||str.charAt(i)=='C'){
      str=str.replace(str.charAt(i),'2');

    }
    if(str.charAt(i)=='J'||str.charAt(i)=='K'||str.charAt(i)=='L'){
          str=str.replace(str.charAt(i),'5');

        }
    if(str.charAt(i)=='T'||str.charAt(i)=='U'||str.charAt(i)=='V'){
          str=str.replace(str.charAt(i),'8');

        }
    if(str.charAt(i)=='J'||str.charAt(i)=='K'||str.charAt(i)=='L'){
          str=str.replace(str.charAt(i),'5');

        }
            if(str.charAt(i)=='G'||str.charAt(i)=='I'||str.charAt(i)=='H'){
          str=str.replace(str.charAt(i),'4');

        }
            if(str.charAt(i)=='P'||str.charAt(i)=='Q'||str.charAt(i)=='R'||str.charAt(i)=='S'){
          str=str.replace(str.charAt(i),'7');

        }
    if(str.charAt(i)=='W'||str.charAt(i)=='X'||str.charAt(i)=='Y'||str.charAt(i)=='Z'){
          str=str.replace(str.charAt(i),'9');

        }

    if(str.charAt(i)=='D'||str.charAt(i)=='E'||str.charAt(i)=='F'){
          str=str.replace(str.charAt(i),'3');

        }
    if(str.charAt(i)=='M'||str.charAt(i)=='N'||str.charAt(i)=='O'){
          str=str.replace(str.charAt(i),'6');

        }
else if(str.charAt(i)>=0 && str.charAt(i)<=9){
    break;
}
else if(str.charAt(i)!='-' && str.charAt(i)<'0' ||str.charAt(i)>'9' || str.charAt(i)>='a' && str.charAt(i)<='z'){
    String data=Character.toString(str.charAt(i));
    StringBuilder sb = new StringBuilder(str);
    sb.deleteCharAt(i);
    str=sb.toString();
    i=i-1;
}
}
return str; 
}
}

答案 4 :(得分:-1)

定义一个地图,其中字符为关键字,数字为值,例如:

HashMap<Character, Integer> map = new HashMap<Character, Integer>();
map.put('A', 2);
map.put('B', 2);
map.put('C', 2);
map.put('D', 3);
.
.
.
for ( int i = 0; i < num.length() ; i++)
{           
    if (Character.isLetter(num.charAt(i))) 
    {
        if (map.containsKey(num.charAt(i)))
        {
            num.replace(i, i + 1, String.valueOf(map.get(num.charAt(i))));
        }
    }           
}