public static String getPartOfString(String string) throws TooShortStringException{
String s2="";
if(string != null || string.indexOf('\t') != -1 || string.indexOf('\t', (string.indexOf('\t')+1)) != -1 ){
s2 = string.substring((string.indexOf('\t')+1), (string.indexOf('\t', (string.indexOf('\t')+1))));
}else{
throw new TooShortStringException();
}
return s2;
}
а надо было именно так:
if(string == null || string.indexOf('\t') == -1 || string.indexOf('\t', (string.indexOf('\t')+1)) == -1 ){
throw new TooShortStringException();
Антон
29 уровень
Кто-нибудь может объяснить почему так нельзя было??
Обсуждается
Комментарии (15)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
11 сентября 2020, 08:29
Потому что в первом случае если у тебя строка не null, сразу будет выполняться s2 = string.substring(...). Остальные условия даже не будут проверяться - в этом уже не будет нужды.
Вот если бы ты поставил && - тогда другое дело...
+1
Антон Backend Developer
11 сентября 2020, 08:37
разве я поставлю && То он не будет искать все схождения, а не одно из них?
0
Антон Backend Developer
11 сентября 2020, 08:38
я думал все время что II (OR) делает проверку на "одно из" а && (AND) на все указанное
0
Ksenia VolkovaJava Developer в DXCMaster
11 сентября 2020, 08:39
Будет. А разве тебе не нужно выделять подстроку только в том случае, если все перечисленные условия - true?
А так у тебя получается, что как раз достаточно "одного из". То есть если строка не null - идем получать подстроку.
0
Антон Backend Developer
11 сентября 2020, 08:41
ну а если я хочу не по условиям задачи а просто при наличии одного из трех каких-либо параметров выкинуть Exeption или начать выполнять какой-либо процесс, то получается || (OR) тут не пойдет? И нужно писать 3 if`a?
0
Ksenia VolkovaJava Developer в DXCMaster
11 сентября 2020, 08:46
То есть даже если в строке нет ни одного \t, ты хочешь все равно получать подстроку между табуляциями?
Или если string = null, ты все равно будешь проверять у нее indexOf('\t')?
Поясни...
Exception ты можешь выкинуть по OR. А вот выполнять действие имеет смысл только если все условия true (то есть через &&)
0
Антон Backend Developer
11 сентября 2020, 08:48
ошибку в первом решении я уже понял, спасибо, действительно не додумал.
То что он действительно будет срабатывать если одно из условий верное, а не все
Просто думал над тем как работает OR, ну это пожалуй потом уже на примере проверю каком-нибудь.
Спасибо
0
Ksenia VolkovaJava Developer в DXCMaster
11 сентября 2020, 08:50
Если в if у тебя действие, а в else exception, то условия в if должны быть с &&.
Если наоборот, в if exception, в else - действие, то в условии должны быть ||.
При инверсии логического выражения && преобразуется в ||, и наоборот.
+2
hidden #2322530
11 сентября 2020, 08:59
выкинуть Exception по одному из 3х случаев, это как раз и есть
я эту задачу решал немного по другому.
приходящую строку проверял на null и isEmpty, если что - то из них сработает, то бросаем исключение.
сплитовал строку по символу табуляции. на выходе слова
если элементов меньще 3х (то есть 2 табуляции хотя бы есть), то выбрасываем исключение
иначе просто возвращаем 2й элемент. он как раз будет между первой и второй табуляцией.
+1
hidden #598481
11 сентября 2020, 09:34
Твои проверки на пустоту строки и количество табуляций можно объединить в одну, догадаешься какую?
0
hidden #2322530
11 сентября 2020, 09:36
regex?
0
hidden #598481
11 сентября 2020, 09:36
нет, все проще, без регулярок
0
hidden #2322530
11 сентября 2020, 09:42
подскажи. может я таких методов не знаю еще
или ты имеешь ввиду проверять просто на количество табуляций, потому что если они есть, то строка 100% не пустая. а если их количество меньше 2х, то все равно выбрасывать исключение
0
hidden #598481
11 сентября 2020, 10:05
да знаешь.
Если строка пустая или табуляций нет, оба вернут -1.
Если только одна табуляция, то оба укажут на нее.
В любом случае надо выкинуть исключение.
Если индексы разные, то работаем дальше, сразу можно возвращать нужную подстроку без дополнительных проверок.
+2
hidden #2322530
11 сентября 2020, 10:06
ну вот я же говорю не знаю, я про них забыл совсем. потому делал через split
0