Создайте это встроенное удовольствие:
inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)
, а затем вы можете вызвать его следующим образом:
val turns = Gson().fromJson<Turns>(pref.turns)
// or
val turns: Turns = Gson().fromJson(pref.turns)
ПРИМЕЧАНИЕ. Этот подход не был возможен раньше в старом плагине kotlin версии, но теперь вы можете использовать его.
Предыдущие альтернативы:
АЛЬТЕРНАТИВА 1:
val turnsType = object : TypeToken<List<Turns>>() {}.type
val turns = Gson().fromJson<List<Turns>>(pref.turns, turnsType)
Вы должны положить object :
и конкретный тип в fromJson<List<Turns>>
Альтернативный вариант 2:
Как @cypressious упомянуть, что может быть достигнуто также таким образом:
inline fun <reified T> genericType() = object: TypeToken<T>() {}.type
использовать как:
val turnsType = genericType<List<Turns>>()
Ну, так как md5 является просто строкой 32 шестнадцатеричных цифр обо всем, что Вы могли добавить к своему выражению, проверка на "32 цифры", возможно, что-то вроде этого?
re.findall(r"([a-fA-F\d]{32})", data)
При использовании регулярных выражений в Python необходимо почти всегда использовать необработанный строковый синтаксис r"..."
:
re.findall(r"([a-fA-F\d]{32})", data)
Это гарантирует, что обратная косая черта в строке не интерпретируется нормальным выходом Python, но вместо этого передается до эти re.findall
функция, таким образом, это видит \d
дословно. В этом случае Вы удачливы, что \d
не интерпретируется выходом Python, но чем-то как \b
(который имеет совершенно другие значения в выходе Python, и в регулярных выражениях) был бы.
Посмотрите re
документация модуля для получения дополнительной информации.
Вот лучший способ сделать это, чем некоторые из других решений:
re.findall(r'(?i)(?<![a-z0-9])[a-f0-9]{32}(?![a-z0-9])', data)
Это гарантирует, чтобы соответствие было строкой 32 шестнадцатеричных символов цифры, , но который не содержится в большей строке других алфавитно-цифровых символов. Со всеми другими решениями, если бы существует строка 37 непрерывных hexadecimals, шаблон соответствовал бы первым 32 и назвал бы ее соответствием, или если бы существует строка 64 hexadecimals, она разделила бы его в половине и соответствовала бы каждой половине как независимому соответствию. Исключая их выполняется через предвидение и lookbehind утверждения, которые не получают и не будут влиять на содержание соответствия.
Примечание также (? i) флаг, который будет, делает шаблон нечувствительным к регистру, который сохраняет определенный ввод, и что обертывание всего шаблона в круглых скобках является лишним.
Как насчет" ([a-fA-F\d] {32})", который требует, чтобы это было 32 символами долго?