Как входящие значения привязать к индексам массива?
На вход программы с консоли поступают буквенные значения. Их нужно перевести в цифры, при условии что а = 0. Сколько на вход поступает букв столько в итоге должно быть и цифр. Вот моя реализация, но при вводе данных происходит переполнение массива. Что я делаю не так? И как это правильно сделать?
//Вывести зашифрованное в буквах числовое значение. Где а = 0
public class TransformingStringToNumbers {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите буквенное значение");
String inputCharacters = reader.readLine();
System.out.println(toTransform(inputCharacters));
}
public static StringBuilder toTransform(String inputCharacters) {
//char [] exampleArray = {'a','b','c','d','e','f','j','h','i','g'};
CharSequence a = "a";
CharSequence b = "b";
CharSequence c = "c";
CharSequence d = "d";
CharSequence e = "e";
CharSequence f = "f";
CharSequence j = "j";
CharSequence h = "h";
CharSequence i = "i";
CharSequence g = "g";
int index = 0;
char[] charArray = inputCharacters.toCharArray();
char [] result = new char[charArray.length];
for (; index < charArray.length; index++) {
if(inputCharacters.contains(a)) {
result[0] = '0';
}else if (inputCharacters.contains(b)){
result[1] = '1';
}else if(inputCharacters.contains(c)){
result[2] = '2';
}else if (inputCharacters.contains(d)){
result[3] = '3';
}else if(inputCharacters.contains(e)){
result[4] = '4';
}else if (inputCharacters.contains(f)){
result[5] = '5';
}else if(inputCharacters.contains(j)){
result[6] = '6';
}else if (inputCharacters.contains(h)){
result[7] = '7';
}else if (inputCharacters.contains(i)){
result[8] = '8';
}else if (inputCharacters.contains(g)){
result[9] = '9';
}
}
return new StringBuilder().append(result[index]);
}
}
Ответы (2 шт):
Автор решения: AlekseiGaile
→ Ссылка
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TransformingStringToNumbers {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите буквенное значение");
String inputCharacters = reader.readLine();
System.out.println(toTransform(inputCharacters));
}
public static StringBuilder toTransform(String inputCharacters) {
int CHAR_A = 97;
char[] charArray = inputCharacters.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
for (char value : charArray) {
stringBuilder.append(value - CHAR_A);
inputCharacters = inputCharacters.substring(1);
}
return stringBuilder;
}
}
Автор решения: Alexander Chernin
→ Ссылка
Если судить по-коду и исправить некоторые ошибки, то ваш код можно существенно сократить (думаю, даже больше, поскольку я не большой знаток Java):
String inputCharacters = "<Строка на вход>";
// Символьная последовательность, можно сказать маска
CharSequence maskSeq = "abcdefjhig";
// массив сигналов, что символ из маски найден во входной строке
char[] result = new char[str.length()];
// Бежим по символам маски
for(int i = 0; i < maskSeq.length() -1; i++) {
// Если входная строка содержит необходимый символ, то
// в соответствующую позицию
if( inputCharacters.contains(String.valueOf(charSeq.charAt(i))) )
result[i] = (char)i;
}