преобразование значения java двухмерного массива (буквы) в целое число (число)

1

Я запутываю, как преобразовать значения в массив 2D char в число (целое число).

Пусть предполагается, что массив: [[a, b],[c, d],[e, f]] или {{'a','b'},{'c','d'},{'e','f'}}

Все значения в этом массиве будут преобразованы в число, a = 0, b = 1, c = 2, d = 3, e = 4, f = 5.

Я ожидаю результат: [[0, 1], [2, 3], [4, 5]] или {{0, 1},{2, 3},{4, 5}}

Если это просто строка "abcdef", я могу использовать charAt(), но я могу использовать ее в массиве, особенно в массиве символов. Итак, я использую.replace.

package array_learning;

public class test {     
    public static void main(String[] args){
        char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
        int strLength = word.length; 
        for(int i = 0; i<strLength; i++){
            for(int j=0; j<2; j++){
                String strWord = Character.toString(word[i][j]);
                strWord = strWord.replace("a","0");
                strWord = strWord.replace("b","1");
                strWord = strWord.replace("c","2");
                strWord = strWord.replace("d","3");
                strWord = strWord.replace("e","4");
                strWord = strWord.replace("f","5"); 
                System.out.print(strWord+" ");
            } 
            System.out.println();
        }     

    }
}

Но результат не тот, который я ожидал.

Результат:

0 1 

2 3 

4 5 

Как решить это правильно?

Теги:
multidimensional-array
char

3 ответа

1
Лучший ответ

Рассматривать:

import java.util.Arrays;   

public class Ctest {
    public static void main(String[] args) {
        char[][] word= { {'a', 'b'}, {'c', 'd'}, {'e', 'f'} };

        println(word); // format with brackets e.g., [[a, b], [c, d]]
        System.out.println(Arrays.deepToString(word)); // same format

        for (int i = 0; i < word.length; i++) {
            for (int j = 0; j < word[i].length; j++) {
                if (word[i][j] >= 'a' && word[i][j] <= 'f') {
                    word[i][j] = (char) ((word[i][j] - 'a') + '0');
                }
            }
        }

        println(word); // formatted with brackets
        printPlain(word); // formatted without brackets
    }

    public static void println(char[][] word) {
        System.out.print("[");
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            System.out.print("[");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
            System.out.print("]");
        }
        System.out.println("]");
    }

    public static void printPlain(char[][] word) {
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
        }
        System.out.println();
    }
}

Основные изменения, которые я сделал, заключаются в том, что значения в массиве фактически конвертированы (я не уверен, что вы этого хотите, вы не сохраняли какие-либо новые значения в массиве раньше), данные обрабатываются как char без преобразованный в String, преобразование выполняется с помощью вычисления вместо специального случая для каждого значения, а преобразование данных и их печать были отделены друг от друга.

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

Еще одно небольшое примечание. На линии, которая преобразует значения из строчных букв в цифры, выражение находится в круглых скобках и отбрасывается на char. Это связано с тем, что при добавлении и вычитании chars Java выполняет расширенное преобразование в int, поэтому для сохранения значения обратно в char[][] необходимо снова отправить его на char.

Я забыл, что в Java уже существует метод в классе java.util.Arrays для форматирования многомерного массива с помощью скобок: Arrays.deepToString(word) предоставит вам тот же формат, что и метод println выше. Я также показал метод printPlain который аналогичен, но не имеет скобок, если вы предпочитаете более чистый формат вывода. Вы также можете легко изменить этот метод, чтобы он добавлялся к StringBuilder и возвращал String, вместо того, чтобы печатать массив напрямую.

  • 0
    Отлично, это работает. Но можно ли печатать в формате 2D-массива без добавления скобок [] или {}?
  • 0
    Я имею в виду, результат автоматически распечатывается в виде 2-мерного массива.
Показать ещё 3 комментария
0

Используйте Arrays.toString() для преобразования вашего массива в строку сначала. Затем сделайте замену. Например:

char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
String strWord = "";
for(char []w : word){
    // convert array int [x, y] format
    strWord += Arrays.toString(w)+",";
}
// removing comma(,) from end.
strWord = strWord.replaceAll(",$", "");

// do your replacement.
strWord = strWord.replace("a","0");
// ... more

// output
System.out.println("["+strWord+"]");
  • 0
    Ах, мои глаза! Оно горит! Очки ничего не делают!
0

Все правильно соответствует. Это массив 2d, поэтому ваши массивы печатаются один за другим.

Если вы не хотите, чтобы они шли по отдельным линиям, то избавляйтесь от System.out.println(); в конце цикла for.

  • 0
    Проблема в том, как поместить значение преобразования в 2D массив. Таким образом, результат должен быть {{"0", "1"}, {"2", "3"}, {"4", "5"}}.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню