Преобразовать номер строки типа данных в тип char - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь преобразовать числа строки в массив с типом данных char. Моя проблема в том, что число в моем массиве каждый раз от 48 до высокого. Я также знаю, что проблема связана с таблицей ASCII. Что я могу сделать, чтобы решить эту проблему?

package Test;

public class Main {




    public static void main(String[] args) {

        int iNumber = 0;    int indexNumber = 0;


        String calculation = "5+8";
        int lengthCalculation = calculation.length();
        int[] number= new int[lengthCalculation/2+1];


        while(iNumber < lengthCalculation) {

            number[indexNumber] = calculation.charAt(iNumber);;

                iNumber+=2;
                indexNumber++;
        }

        for(int q : number) {
            System.out.println(q);         }
    }


}

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Di git 0 имеет значение ASCII 48. Диапазон значений ASCII для цифр 0-9 составляет 48-57. Итак, всякий раз, когда вы извлекаете символ, скажем, «5», вы сохраняете 53 вместо 5 в массиве. Поэтому попробуйте использовать приведенную ниже модификацию кода, где вы вычитаете символ «0»:

public static void main(String[] args) {

    int iNumber = 0;    int indexNumber = 0;


    String calculation = "5+8";
    int lengthCalculation = calculation.length();
    int[] number= new int[lengthCalculation/2+1];


    while(iNumber < lengthCalculation) {

        number[indexNumber] = calculation.charAt(iNumber)-'0'; //modified

            iNumber+=2;
            indexNumber++;
    }

    for(int q : number) {
        System.out.println(q);         }
}
0 голосов
/ 31 марта 2020

Сделайте это следующим образом:

if(calculation.charAt(iNumber) >= '0' && calculation.charAt(iNumber) <= '9') {
     number[indexNumber] = calculation.charAt(iNumber) - '0';
} else {
    number[indexNumber] = calculation.charAt(iNumber);
}

В качестве альтернативы

if(calculation.charAt(iNumber) >= '0' && calculation.charAt(iNumber) <= '9') {
     number[indexNumber] = calculation.charAt(iNumber) - 48;
} else {
    number[indexNumber] = calculation.charAt(iNumber);
}

Обратите внимание, что значение ASCII от 0 до 9 от 48 до 57.

Если вы хотите сохранить и отобразить все символы, вы можете изменить свою программу следующим образом:

public class Main {
    public static void main(String[] args) {
        int i = 0;
        String calculation = "5+8";
        int lengthCalculation = calculation.length();
        int[] number = new int[lengthCalculation];
        while (i < lengthCalculation) {
            if (calculation.charAt(i) >= '0' && calculation.charAt(i) <= '9') {
                number[i] = calculation.charAt(i) - '0';
            } else {
                number[i] = calculation.charAt(i);
            }
            i++;
        }
        for (int q : number) {
            if (q >= 0 && q <= 9) {
                System.out.println(q);
            } else {
                System.out.println((char) q);
            }
        }
    }
}

Вывод:

5
+
8
0 голосов
/ 31 марта 2020

использование

number[indexNumber] = calculation.charAt(iNumber) - '0';

...