#kotlin
#kotlin
Вопрос:
Я пытаюсь проверить, является ли результат mac-адресом в kotlin.
Как правильно использовать регулярное выражение в if-else?
regex="X:X:X:X:X:X"
if $theresult is a mac address then do;
println"its a mac!"
else
println "its not a mac"
Комментарии:
1. То, что у вас есть, — это MAC-адрес . ‘MAC’ = управление доступом к мультимедиа; ‘Mac’ = Macintosh (компьютер Apple); ‘mac’ = macintosh (дождевик).
2. если да, я съем яблоко.
Ответ №1:
Решение с использованием регулярных выражений:
val macRegex = Regex("([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}")
fun isMac(str: String) = str.matches(macRegex)
fun main() {
val testCases = listOf(
"12:34:56:78:90:ab", // true
"24:1D:57:84:04:35", // true
"7B:2A:89:CF:9A:F3", // true
"12:34:56:78:90:AB", // true
"12:34:56:78:90:fg", // false
"12:34:56:78:90", // false
"1234567890ab" // false
)
testCases.forEach {
if (isMac(it)) {
println("$it - is a mac!")
} else {
println("$it - is not a mac")
}
}
}
Комментарии:
1. Спасибо за ответ. Это очень просто, но результат не является строкой, поэтому мне нужно преобразовать его в строку «if (isMac(it.toString()))», и теперь это работает. Есть ли какой-либо другой способ прямого использования результата?
2. Регулярные выражения работают только со строками. Каков тип объекта, представляющего MAC-адрес в вашем случае?
3. Я не знаю тип, потому что я использую плагин. Если регулярное выражение работает только со строками, я все равно должен конвертировать. Спасибо за информацию.
Ответ №2:
Вы можете разделить двоеточия и проверить, имеет ли он правильное количество частей, затем убедитесь, что каждая часть состоит из 2 символов действительного шестнадцатеричного числа:
fun isLowerHex(chr: Char): Boolean =
chr >= '0' amp;amp; chr <= '9' ||
chr >= 'a' amp;amp; chr <= 'f'
fun isMac(str: String): Boolean {
val lowerStr = str.toLowerCase()
val parts = lowerStr.split(":")
return parts.size == 6 amp;amp; parts.all { it.length == 2 amp;amp; it.all(::isLowerHex) }
}
fun main() {
val testCases = listOf(
"12:34:56:78:90:ab", // true
"24:1D:57:84:04:35", // true
"7B:2A:89:CF:9A:F3", // true
"12:34:56:78:90:AB", // true
"12:34:56:78:90:fg", // false
"12:34:56:78:90", // false
"1234567890ab" // false
);
testCases.forEach {
println("$it ${isMac(it)}")
}
}
Комментарии:
1. Спасибо за ответ, но я новичок в kotlin, и я пытаюсь узнать, как я могу использовать регулярное выражение в if-else. Мне понравился ваш подход, но если мне нужно что-то другое, то этот подход не подходит для новичка.