#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
instring
есть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