Проблема замены символа в массиве символов цифрой

#java #char #chararray

#java #символ #chararray ( символ )

Вопрос:

Учитывая строку, я должен заменить все гласные на их соответствующую позицию в массиве. Однако мой код возвращает какие-то странные символы вместо цифр. В чем проблема?

         String s = "this is my string";
        char p = 1;
        char[] formatted = s.toCharArray();
        for(int i = 0; i < formatted.length; i  ) {
            if(formatted[i] == 'a' ||formatted[i] == 'e' ||formatted[i] == 'i'
                    ||formatted[i] == 'o' ||formatted[i] == 'u') {
                formatted[i] = p;
            }
            p  ;
        }
        s = String.valueOf(formatted);
        System.out.println(s);
 

P.S: Числа больше 10

Комментарии:

1. Символ '1' имеет значение, отличное от числа 1 . Вы можете использовать char p = '1'; до тех пор, пока количество вставляемых вами чисел меньше 10.

2. Что должно произойти с гласной в индексе 14? / Обратите внимание на целое число и символ ascii-значения. / Вы можете зацикливать буквы в StringBuffer и добавлять букву или строку "" (i 1) значения индекса цикла в виде строки.

3. Позиция i in string есть 14 , но 14 не является символом; это числовая строка.

Ответ №1:

 this is my   s  t  r  i  n g
012345678910 11 12 13 14
 

Позиция i in string 14 — это, но 14 не символ; это числовая строка. Это означает, что вам нужно иметь дело со строками вместо символов. Разделите s , используя "" в качестве разделителя, обработайте полученный массив и, наконец, объедините массив обратно в строку, используя "" в качестве разделителя.

 class Main {
    public static void main(String[] args) {
        String s = "this is my string";
        String[] formatted = s.split("");
        for (int i = 0; i < formatted.length; i  ) {
            if (formatted[i].matches("(?i)[aeiou]")) {
                formatted[i] = String.valueOf(i);
            }
        }
        s = String.join("", formatted);
        System.out.println(s);
    }
}
 

Вывод:

 th2s 5s my str14ng
 

Регулярное выражение (?i)[aeiou] определяет соответствие без учета регистра для одной из гласных, где (?i) указывается нечувствительность к регистру. Протестируйте это здесь.

Ответ №2:

Символ '1' имеет значение, отличное от числа 1 .

Вы можете измениться

 char p = 1;
 

Для

 char p = '1';
 

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

Комментарии:

1. Он должен охватывать числа выше 10, как мне тогда это сделать?

2. Вы могли бы переключиться на использование a StringBuilder вместо массива символов.

Ответ №3:

корень проблемы уже в комментариях,

в Java типы влияют на размер памяти и ее представление

int x = 1; и char y = ‘1’

не содержат одного и того же значения, это связано с тем, что многие числовые представления связаны с кодами ascii, а значение, которое вам нужно присвоить y, чтобы напечатать число 1, равно шестнадцатеричному 0x31 или DEC 49.

взгляните на таблицу ascci

введите описание изображения здесь