Здравствуйте. Подскажите, пожалуйста, почему ловлю ошибку при таком содержимом мапы
paramsThree.put("null",null);
?
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967)
at com.javarush.task.task22.task2208.Solution.getQuery(Solution.java:41)
at com.javarush.task.task22.task2208.Solution.main(Solution.java:20)
Код
public class Solution {
public static Map<String,String> paramsOne = new LinkedHashMap<>();
public static Map<String,String> paramsTwo = new LinkedHashMap<>();
public static Map<String,String> paramsThree = new LinkedHashMap<>();
public static void main(String[] args) {
System.out.println(getQuery(paramsTwo));
System.out.println(getQuery(paramsOne));
System.out.println(getQuery(paramsThree));
}
public static String getQuery(Map<String, String> params) {
StringBuilder stringBuilder = new StringBuilder();
String result = "";
if ((!checkNull(params))||(params.isEmpty())) return result = "";
for (Map.Entry<String, String> entry : params.entrySet()) {
if (entry.getValue() == null ) {
continue;
}
stringBuilder.append(String.format("%s = '%s' and ", entry.getKey(), entry.getValue()));
}
result = stringBuilder.toString().substring(0,stringBuilder.lastIndexOf("and")).trim();
return result;
}
static {
paramsOne.put("name", "Ivanov");
paramsOne.put("country", "Ukraine");
paramsOne.put("city", "Kiev");
paramsOne.put("age", null);
paramsTwo.put("name", "Vova");
paramsTwo.put("country", "Canada");
paramsTwo.put("city", "Ottawa");
paramsTwo.put("age", "18");
paramsThree.put("null",null);
}
public static <K, V> boolean checkNull(Map<K, V> entry) {
int i = 0;
for (Map.Entry<K,V> entry1:entry.entrySet()){
if(entry1.getKey()!=null||entry1.getValue()!=null){
i+=1;
}
}
if (i>0) {
return true;
}
return false;
}
}