Igor
а главное из этого регекспа можно сразу и группы выдернуть по идее т.е не только чекнуть но и распарсить сразу.
Igor
Я уверен есть проще
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "5 + 10"; String pattern = "^\\s*(\\d+)\\s*([+\\-*/])\\s*(\\d+)\\s*$"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); if (m.find()) { System.out.println("The string matches the pattern."); for (int i = 0; i <= m.groupCount(); i++) { System.out.println("Group " + i + ": " + m.group(i)); } } else { System.out.println("The string does not match the pattern."); } } } как найдешь проще напиши %) я хочу это видеть ... в 3 строки чекнуть и распарсить ... куда короче то? насыпал пробельных символов в начале и в конце если они не нужны их можно убрать. это максимально всеядная хрень
Igor
Окей сорри значит я лох ;)
Wietcewitch
Я какие-то основы не знаю и что-то упускаю
Wietcewitch
Окей сорри значит я лох ;)
Наоборот, слишком умный и предлагаешь сложное решение
Igor
ыыыы ... ладно ) как напишешь скинь пожалуйста ... буду у тебя учиться программировать.
Wietcewitch
У меня задача не впустить рандомный текст из строки в программу
LinRaw
Помогите, кто не спит, буду признателен) Задача: В рассказе А. П. Чехова «Анна на шее» найдите десять слов, которые встречаются чаще всего. 1. Напишите код на Python, который читает файл word_freq.txt по строкам, преобразует каждую из них в кортеж (частота, слово) и складывает полученные кортежи в список. 2. Отсортируйте список по частотам, выведите на экран десять самых популярных слов и их частоты. Вот че я написал пока что: with open('words_freq.txt') as file: while (line := file.readline().rstrip().split()): print(line)
Agent_RBY_
ыыыы ... ладно ) как напишешь скинь пожалуйста ... буду у тебя учиться программировать.
Я придумал решение по короче: String str = "5 + 10"; Pattern.compile("^\\s*(\\d+)\\s*([+\\-*/])\\s*(\\d+)\\s*$").matcher(str) Не благодарите 🙂
Agent_RBY_
можно всю прогу в одну строчку впихнуть
Agent_RBY_
тогда все коротко будет
Agent_RBY_
Igor
Igor
где str - меняешь на вход пользователя
Ты убрал анализ матчера а смысл... Тебе прийдется написать тот же код
Agent_RBY_
Ты убрал анализ матчера а смысл... Тебе прийдется написать тот же код
Ну, запихиыаешь мою строчку в иф и делаешь find(), не?)
Andrii
Что значит, открыл, и нафига это тебе надо?
Igor
Ну, запихиыаешь мою строчку в иф и делаешь find(), не?)
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "5 + 10"; String pattern = "^(\\d+)\\s*([+\\-*/])\\s*(\\d+)\\s*$"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(str); if (m.find()) { System.out.println("The string matches the pattern." + m.group(1) + m.group(2)+ m.group(3)); } else { System.out.println("The string does not match the pattern."); } } }
Asiman
в питоне калькулятор делается всего одной функцией
Asiman
eval('3+4')
Igor
А, там матчер юзается
я говорю что можно сразу и распарсить ... а не только чекнуть
Wietcewitch
не знаю что за проблема вообще это сделать в джаве
Сделал, но не понял как сделать throws при вводе рандмных слов
Asiman
eval('3+4')
есть там конечно нюансы, совершенно незначительные
Igor
eval('3+4')
ему нужно чтобы считало только с двумя операторами и только с 4 операциями ;)
Igor
есть там конечно нюансы, совершенно незначительные
собственно вокруг нюансов и пляешем ;)
Andrii
в питоне калькулятор делается всего одной функцией
Угу, с прямой уязвимостью к иньекциям
Asiman
Угу, с прямой уязвимостью к иньекциям
ахаха, я бы назвал функцию "самая простая уязвимость в питоне, и немного калькулятора"
Andrii
Или бэкдор-калькулятор
Asiman
вообще надо почитать исходники этого eval
Asiman
ведь по сути это код запускающий код, можно хоть что-то из работы интерпретатора понять
Wietcewitch
https://www.youtube.com/watch?v=0mGAlzT4vY8 В час ночи я смотрю как десятилетний мальчик делает калькулятор на джаве
Asiman
Ну... Вызывает PyEval ...
а ты читал исходники cpython?
Igor
чекнуть тот же регексп и можно запускать не париться. ;)
Mikhail
Сделал, но не понял как сделать throws при вводе рандмных слов
Миллион разных вариантов. Можешь использовать какой-нибудь StringUtils.isNumeric из Apache Commons.
Igor
https://www.youtube.com/watch?v=0mGAlzT4vY8 В час ночи я смотрю как десятилетний мальчик делает калькулятор на джаве
Понимаешь есть разница ожидать вменяемого пользователя и обработать любой возможный ввод
Andrii
а ты читал исходники cpython?
https://github.com/python/cpython/blob/f1f3af7b8245e61a2e0abef03b2c6c5902ed7df8/Python/ceval.c#L551
Wietcewitch
Понимаешь есть разница ожидать вменяемого пользователя и обработать любой возможный ввод
У меня по условиям задачи выдавать ошибку если написали ересь
Igor
Ну мы твое условие не видели ;)
Igor
Ладно это слишком сложно для меня ... убедить человека что ему нужен твой совет ;) я пожалуй скипну ;)
Wietcewitch
Asiman
Читал, а что?
просто интересно стало, ты про PyEval, а это явно сишная структура) я тут на днях скачал исходники 3.11.1 и офигел как там много всего... даже чтобы просто подготовиться к компилированию нужно сделать ./configure который подготовит makefile для моего окружения
Andrii
просто интересно стало, ты про PyEval, а это явно сишная структура) я тут на днях скачал исходники 3.11.1 и офигел как там много всего... даже чтобы просто подготовиться к компилированию нужно сделать ./configure который подготовит makefile для моего окружения
./configure это стандарт для Unix мира. Просто всяких Unix овердофига, там много несовместимостей, что-то есть в одном, что-то в другом, куча компиляторов, ... Поэтому задача ./configure протестировать компилятор и тулчейн и перевести это в #define
Wietcewitch
Миллион разных вариантов. Можешь использовать какой-нибудь StringUtils.isNumeric из Apache Commons.
Хотел так сделать, но возникает проблема: мне на вход дается строка, я её через split разделяю на три составляющих - первое число, знак(+ - * /) и второе число Перевожу первое, второе число в int то есть сама строка не вся является числом, есть ещё знак
Andrii
Это просто цель в make
Mikhail
Вообще лучше всего регуляркой такое делать, но раз тебе выше не понравился вариант, то делай топорные валидации, там много всяких edge case’ов
Andrii
А в ./configure ты указываешь, куда инсталить --prefix, что билдить, что не билдить, ...
Wietcewitch
И в чем именно проблема?
Я сильно туплю, потому что не в материале У меня строка разделяется сплитом и там есть число, символ и ещё число над чтобы при 1 + 2 всё считало, а чтобы при asdadada вылетало
Andrii
Например, должен ли интерпретатор Python выводить все утечки памяти? Если ты не разработчик Python, то тебе в общем-то наплевать, всё равно не пофиксишь. А вот с дескрипторами вопрос уже тонкий, в принципе дескрипторы могут утекать и в пользовательском коде
Igor
Я сильно туплю, потому что не в материале У меня строка разделяется сплитом и там есть число, символ и ещё число над чтобы при 1 + 2 всё считало, а чтобы при asdadada вылетало
import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Scanner; public class calc { public static void main (String[] args) throws Exception { Scanner scan = new Scanner(System.in); String numbers = scan.nextLine(); Matcher m = Pattern.compile("^(\\d+)\\s*(.)\\s*(\\d+)\\s*$").matcher(numbers); if (m.find()) { var num1 = m.group(1); var num2 = m.group(3); var operator = m.group(2); int x = Integer.parseInt (num1); int y = Integer.parseInt (num2); if ((x > 10) | (y > 10)) { throw new Exception("Число не может быть больше 10"); } else if ((x < 1) | (y < 1)) { throw new Exception("Число не может быть меньше 1"); } else if (operator.equals("+")) { System.out.println(x + y); } else if (operator.equals("-")) { System.out.println(x - y); } else if (operator.equals("*")) { System.out.println(x * y); } else if (operator.equals("/")) { System.out.println(x / y); } else { throw new Exception("Неверное значение"); } } else { throw new Exception("Еблан ваще не отдупляет что ввел"); } } }
Igor
Поправил твой код ;) ...
Igor
Я тебе об этом уже час говорю ...
Igor
Ушел книжки читать ... Хорошей ночи всем (ну или дня у кого что ;) )
Dmitry (Inock)
Окей сорри значит я лох ;)
Мало строчек - это хорошо?
Mikhail
Мало строчек - это хорошо?
Если платят построчно - то плохо.
Igor
Мало строчек - это хорошо?
Там речь о другом была ... мне на джаве чтобы показать ему пример нужно было создать класс и т.п. он почему то все эти строчки считает ... они всеравно у него в программе будут. Вобщим у меня там нет аргументов.
Andrii
утечка дескрипторов это когда берется файл на запись/чтение и не отпускается?
Да, например. В принципе, он будет освобождён на этапе сборки мусора, но это может быть долго, ...
Dmitry (Inock)
Если платят построчно - то плохо.
Именно поэтому Маяковский писал лесенкой. Из-за тарифов в издательствах.
Andrii
И этого может и не наступить
Asiman
А в ./configure ты указываешь, куда инсталить --prefix, что билдить, что не билдить, ...
я про вот этот install, правда я еще не разобрался как make его вызывает, но это я думаю через месяца два-три только изучать) пока только смотрю
Igor
Я так джаву снова выучу ;))))
Dmitry (Inock)
Я так джаву снова выучу ;))))
Потом за котлин возьмёшься
Igor
Потом за котлин возьмёшься
тут вопросы за котлин не задают ;)
Dmitry (Inock)
Mikhail
Я так джаву снова выучу ;))))
Для начала там надо будет добавить фабрику для операторов, контекст прокидывать, менеджер запросов, обмазаться интерфейсами, обязательно добавить юнит-тесты и т.д и т.п. А то это у тебя какой-то не джава код получился