2016-12-06 3 views
3

Я немного зациклен на том, как я должен заменить каждый элемент в массиве символов на число.Как преобразовать символы из строки в числа (преобразованный номер телефона)?

Вот код, который я до сих пор:

public static void main(String []args){ 

    String[] dialTwo = {"a", "b", "c"}; 
    String[] dialThree = {"d", "e", "f"}; 
    String[] dialFour = {"g", "h", "i"}; 
    String[] dialFive = {"j", "k", "l"}; 
    String[] dialSix = {"m", "n", "o"}; 
    String[] dialSeven = {"p", "q", "r", "s"}; 
    String[] dialEight = {"t", "u", "v"}; 
    String[] dialNine = {"w", "x", "y", "z"}; 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter a phone number: "); 
    String phoneInput = in.next(); 
    char[] inputToArray = phoneInput.toCharArray(); 


    while (!phoneInput.matches("^[a-pA-P0-9]*$")) { 
     System.out.println("Not a valid number. Try agian."); 
     phoneInput = in.next(); 
    } 

Я был в состоянии успешно проверить строку в случае, если кто хотел войти ;; «;» ;.

Благодарим вас за помощь.

Мой учитель также хочет, чтобы я использовал классы методов, но я немного смущен, поэтому я делаю это несколько иначе.

Так выход я хочу, если кто-то на вход «CFG» было бы напечатать 123.

+0

Любая конкретная причина вы используете String []? В любом случае вам нужно использовать цикл for, который выполняет итерацию над массивом char. Проверьте, что каждая строка [] содержит этот конкретный символ и соответственно заменяет символ. – user1211

+0

@ user1211 благодарит за ваш ответ. Не возражаете, как это сделать? Я немного запутался в том, как использовать цикл for для циклического перемещения по строке. А что касается String [], я не слишком уверен ... должен ли я использовать char []? – guccimanilla

+0

Возможный дубликат [застрял на генераторе слов java номера телефона] (http://stackoverflow.com/questions/19793247/stuck-on-a-java-phone-number-word-generator) – Igoranze

ответ

0

Вы можете использовать Коллекции вместо String []. Вероятно, карта была бы хорошей. Но, так как вы используете String [] следующий код должен помочь:

for (int i = 0; i < inputToArray.length; i++) { 
       if (Arrays.asList(dialTwo).contains(inputToArray[i])) 
        inputToArray[i]=2; 
      ... 

      } 

Вы должны заполнить ... часть с другими, если еще условиями, когда вы проверяете для inputToArray [я] с другими массивами и заменить соответственно.

+0

Хм хорошо, вроде как понять ... как бы я его напечатать? печать inputToArray (input = abc) только входы abc. – guccimanilla

+0

Печать проста. System.out.println (Arrays.toString (inputToArray)); – user1211

+0

просто печатает исходный массив. спасибо за попытку. – guccimanilla

0

Простой способ сделать это, чтобы отобразить функцию в использовании карты

inputToArray.stream().map(/*some function*/).toArray(); 
private void int /*your function*/(char c){...} 

Немного ржавый на Java поэтому не может претендовать на правильность синтаксиса, но в основном карте функцию, которая принимает символ и возвращает ваш желаемый int в ваш массив. После этого все, что вам нужно сделать, это написать фактическую функцию, которую вы собираете.

Там также ряд способов, вы можете просто разобрать строку, возвращаемую рядом, как там, кажется, не будет какой-либо конкретной причины, в вашем коде для преобразования в массив символов

Также следует отметить, что довольно неэффективно иметь массивы из 1 строки длины без какой-либо конкретной причины. Вы можете легко использовать строки вместо

0

Мы можем использовать Регулярное выражение (regex) здесь, чтобы найти алфавиты на входе и заменить каждое соответствующее целое число, пока целое значение не будет содержать целые числа.

Добавьте следующий код:

/*Search and replace all alphabets till only numbers are left in the string*/ 
while(phoneInput.matches("^[a-zA-Z0-9]*$") && !phoneInput.matches("^[0-9]*$")){ 
     /* 
     * Scenario 1: 
     * The regex used will search for one occurrence of alphabets a, b & c(both upper and lower case) 
     * and replace with "1". 
     * Same goes down for other values as well. 
     */ 
     phoneInput = phoneInput.replaceFirst("[a-cA-C]", "2"); 
     phoneInput = phoneInput.replaceFirst("[d-fD-F]", "3"); 
     phoneInput = phoneInput.replaceFirst("[g-iG-I]", "4"); 
     phoneInput = phoneInput.replaceFirst("[j-lJ-L]", "5"); 
     phoneInput = phoneInput.replaceFirst("[m-oM-O]", "6"); 
     phoneInput = phoneInput.replaceFirst("[p-sP-S]", "7"); 
     phoneInput = phoneInput.replaceFirst("[t-vT-V]", "8"); 
     phoneInput = phoneInput.replaceFirst("[w-zW-Z]", "9"); 
    } 

System.out.println("The formatted phone number is: " + phoneInput); 

Это должно служить цели.

+0

Пожалуйста, объясните код, который вы опубликовали, ответ «только код» не помогают. – AxelH

+0

@AxelH отредактировал ответ, чтобы включить объяснение в комментарии. –

+0

Ну, вы могли бы поместить вне кода;) и числовое значение неверно, a-c = 2, а не 1. – AxelH

0
public static void main(String[] args) { 
    String[] dialTwo = { "a", "b", "c" }; 
    String[] dialThree = { "d", "e", "f" }; 
    String[] dialFour = { "g", "h", "i" }; 
    String[] dialFive = { "j", "k", "l" }; 
    String[] dialSix = { "m", "n", "o" }; 
    String[] dialSeven = { "p", "q", "r", "s" }; 
    String[] dialEight = { "t", "u", "v" }; 
    String[] dialNine = { "w", "x", "y", "z" }; 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter a phone number: "); 
    String phoneInput = in.next(); 
    char[] inputToArray = phoneInput.toCharArray(); 

    int i = 0; 
    while (!phoneInput.matches("^[a-zA-Z0-9]*$")) { // Used to check if any 
                // special character is 
                // enter in phone number 
     System.out.println("Not a valid number. Try agian."); 
     phoneInput = in.next(); 
    } 

    List<String> one = (List) Arrays.asList(dialTwo); 
    // for converting array into list so that we can use contains method 
    // which is not //available in array 
    List<String> two = (List) Arrays.asList(dialThree); 
    List<String> three = (List) Arrays.asList(dialFour); 
    List<String> four = (List) Arrays.asList(dialFive); 
    List<String> five = (List) Arrays.asList(dialSix); 
    List<String> six = (List) Arrays.asList(dialSeven); 
    List<String> seven = (List) Arrays.asList(dialEight); 
    List<String> eight = (List) Arrays.asList(dialNine); 

    while (i < inputToArray.length) { 
     if (inputToArray[i] >= 48 && inputToArray[i] <= 57) { 
      // for numeric characters 

      System.out.print(inputToArray[i]); 
     } else if (one.contains(String.valueOf(inputToArray[i]).toLowerCase())) 
     /* 
     * searches given character by converting it into lower case in case 
     * of capital letters 
     */ 
     { 
      System.out.print(1); 
     } else if (two.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(2); 
     } else if (three.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(3); 
     } else if (four.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(4); 
     } else if (five.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(5); 
     } else if (six.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(6); 
     } else if (seven.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(7); 
     } else if (eight.contains(String.valueOf(inputToArray[i]).toLowerCase())) { 
      System.out.print(8); 
     } 
     i++;// counter variable for counting number of chars entered 
    } 
} 
+1

Пожалуйста, объясните код, который у вас есть, ответ «только код» не помогают. – AxelH

+0

Список one = (Список) Arrays.asList (dialTwo); – kiran

+0

выше строки преобразует массив в список – kiran

1

Мое решение было бы немного проще.

Во-первых, я бы не использовать эти массивы, но один 2D массив, как:

static char[][] keyboard = { 
    {'a','b','c'},  //2 
    {'d','e','f'},  //3 
    {'g','h','i'},  //4 
    {'j','k','l'},  //5 
    {'m','n','o'},  //6 
    {'p','q','r','s'}, //7 
    {'t','u','v'},  //8 
    {'w','x','y','z'} //9 
}; 

Затем из этого, я бы петля на каждый символ входного вас есть. Для каждого символа я бы искал, на каком массиве он есть. Значение, которое вам нужно, это index + 2. Поэтому, используя простой цикл for на keyboard, вы можете найти, где символ и напечатать требуемое значение. Конечно, существует исключение для числового, пространственного и символьного.

for each character in input 
    if character is numeric 
     output (toNumeric (character)) 
    else 
     index = 0 
     while character not found 
      if character in array[index] 
       output (index + 2) 
     index++ 

Для более кода, ну, вы должны дать больше информации, потому что вы должны работать немного слишком;)

+0

Спасибо за ваш ответ, но это по-прежнему очень запутанно для меня, думаю, мне нужно поговорить с учителем – guccimanilla

+0

@guccimanilla, какая часть? Я попытался найти аналитический ответ, чтобы вы могли понять и попробовать это сами, это будет то, как вы узнаете. Но я все еще могу объяснить или направить вас больше. – AxelH

Смежные вопросы