Вывод
Это стоит один бакс, а вот это - один2 . Переменная имеет имя fileодин. одинодин0 - это число.
public class Solution {
public static Map<Integer, String> map = new HashMap<Integer, String>();
static {
map.put(0, "ноль");
map.put(1, "один");
map.put(2, "два");
map.put(3, "три");
map.put(4, "четыре");
map.put(5, "пять");
map.put(6, "шесть");
map.put(7, "семь");
map.put(8, "восемь");
map.put(9, "девять");
map.put(10, "десять");
map.put(11, "одиннадцать");
map.put(12, "двенадцать");
}
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = bufferedReader.readLine();
BufferedReader reader = new BufferedReader(new FileReader(fileName));
ArrayList<Integer> listTextDigital = new ArrayList<>();
Map<Integer, String> mapDigitText = new HashMap<Integer, String>();
String line;
while ((line = reader.readLine()) != null) {
String[] arrayStr = line.split(" ");
for (String strText : arrayStr) {
Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matLine = pattern.matcher(line);
while (matLine.find()) {
listTextDigital.add(Integer.parseInt(line.substring(matLine.start(), matLine.end())));
}
for (int digitlText : listTextDigital) {
for (Map.Entry<Integer, String> entry : map.entrySet()) {
int key = entry.getKey();
String value = entry.getValue();
if (digitlText == key) {
mapDigitText.put(key, value);
}
}
}
for (Map.Entry<Integer, String> entry : mapDigitText.entrySet()) {
String keyDigitText = String.valueOf(entry.getKey());
String valueDigitText = entry.getValue();
strText = strText.replaceAll(keyDigitText, valueDigitText);
}
System.out.print(strText + " ");
}}
reader.close();
}
}
VitalyK #1116124
39 уровень
Помогите пожалуйста разобраться .
Архивный
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
20 ноября 2019, 09:32
Слушай, вот сколько раз тебе писали про нейминг? Это НЕУВАЖЕНИЕ каждый раз просить читать подобный код, что это за key1, thing1, list1, map1, strNew, str, arr??? Я в голове все эти названия должен соотносить со смыслами и держать в уме пока читаю твой код? Перепиши с нормальными названиями, это трындец какой-то. Тебе ведь уже указывали на это, ты отвечал "хи-хи, я такой, я ленюсь))"
Попробуй делать нормально, а не на отцепись, сразу начнет получаться.
По существу тоже нифига не понятно
arr - всегда массив из одного элемента, сплит по переносу каретки здесь нужен как рыбе зонтик.
Где в коде объявлена map? Что в ней хранится? Почему этого опять нельзя понять из названия?
никакого substring здесь не нужно, это называется matcher.group() и возвращает сразу подстроку, соответствующую паттерну.
у тебя dig (копать? копатель? 🤬) - это Integer, а не int. ссылочные типы не надо сравнивать через ==. Вообще стоит конечно в int сохранять, зачем тебе обертка непонятно.
Это все вопросы чисто по коду и оформлению, логику пока не не затрагивал. Теперь по логике.
Что ты пытаешься сохранить map1? те числа из диапазона 1-12, которые тебе встретились в тексте? Что тебе это даст?
+1
hidden #598481
20 ноября 2019, 09:35полезный
В последнем цикле перед выводом текста ты преобразуешь строку test и кладешь ее в строку strNew, которую никак не используешь до тех пор, пока не не закончится цикл.
То есть ты заменил первое совпадение, ничего с этим не сделал, начал смотреть другие цифры. test как содержало "1", так и продолжило содержать, ты начал заменять следующие значения, не изменяя test. В конце концов прошелся по последнему вхождению map1, и если у него был ключ "12", то заменил в тесте все двенашки и наконец вывел в консоль.
+2
VitalyK #1116124
20 ноября 2019, 10:37
спасибо по логике разобрался, а по названием ...... помогите, чтоб не дискутировать, скажите хотя бы один пример . допустим , в условии есть один map, как назвать другой ? Я посмотрел других ... line, str, array - какой-то особой смысловой нагрузки не увидел. Да в примерах в гугле иногда встречается длинные смысловые названия ., пытаться так называть?. Просто приведите пожалуйста несколько примеров. С Уважением Виталий.
0
hidden #598481
20 ноября 2019, 11:04решение
Извини, если я слишком резок был, обидеть не хотел.
Не надо вообще называть переменную map, это все равно что на табличке с названием моста писать просто "мост". Мост называется Дворцовым оттого, что ведёт ко дворцу. Сообразно этому переменную мапы надо назвать так, чтобы понятно было что в ней лежит, зачем она используется. Если в ней хранится написание чисел, пусть это будет twelveNumbers или numbersSpelling, всяко это понятней. Если строка используется как буферная, и хранит текущую строку, пусть переменная называется, например, currentLine. Это будет в 146 раз понятнее, чем newStr
+3
VitalyK #1116124
20 ноября 2019, 11:47
Спасибо, переделал. map не менял это условие задачи.
+1
VitalyK #1116124
20 ноября 2019, 12:37
Спасибо еще раз за подсказку. решил
0