当"数据库"中的字符串不存在时,无法捕获异常

时间:2017-09-25 10:29:31

标签: java

我有这样的事情:

...
while (itr.hasNext()) {
...
try {

    if (userInput.equalsIgnoreCase(theData.getName())
        || (country.getName().toString()).equalsIgnoreCase(theData.getName()))
       {

        result = new Country(PointT, dist);
        break;

      } else {

        for (int i = 0; i < repl.size(); i++) { 

          if (repl.get(i).toString().contains(theData.getName())) {

            theName = true;
            result = new Country(PointTt, dist, theName);
            break;
          } else if (theParts.get(i).toString().equalsIgnoreCase(theData.getName())) {
            result = new Country(PointT, dist);
            break;
          } 
        } 


      }
    } catch (NoSuchElementException ex) {
      logger.error("Does not exist in database", ex);
      throw ex;
    } catch (NullPointerException ex) {

      logger.error("Does not exist in database", ex);
      throw ex;
    }catch (Exception ex) {
      logger.error("Does not exist in database", ex);
      throw ex;
    }
}
...

所以,我正在与theData.getName()进行比较,userInput只是一个字符串,country.getName()也是一个字符串,repl.get(i)是一个List<String> },theParts.get(i)也是List<String>

我无法找到解决方案来使其工作。当数据库(theData.getName())中不存在字符串时抛出异常。

读取数据

要阅读theData

我正在使用FileInputStream fis = new FileInputStream(filelocation);

然后,只提取字符串并存储它们:

ArrayList<String> theNames = new ArrayList<String>();

然后我将theNames与其他迭代器合并并创建

ArrayList<theNamesLoc> theNamesLocList = new ArrayList<theNamesLoc>();

,这就是我申请的数组列表:

Iterator<TheNamesLoc> itr = theNamesLocList.iterator();

while (itr.hasNext()) {

..}

1 个答案:

答案 0 :(得分:0)

修改

假设repl是保存数据库中所有响应的列表,可能有两种情况:

  1. 给定输入是列表中任何字符串的一部分(例如:输入为'xyz',列表包含元素'axyzw')。
  2. 输入完全匹配列表中的一个项目。
  3. 第一种情况:

    boolean isPresent = false;
    for(String elem: list){
        if(elem.contains("xyz")){//check each string if it contains the element
            isPresent = true;
            break;
        }
    }
    if(!isPresent){
        throw new NoSuchElementException("Element wasn't found in the list");
    }
    

    第二种情况:

    第二种情况非常简单:

    if(!list.contains("xyz")){
        throw new NoSuchElementException("Element not found");
    }
    

    最终,你必须“抛出”异常,以后可以在任何需要的地方捕获。

    原始答案:

    如果我的问题正确,你需要定义一个else块并“抛出”异常。

    if (repl.get(i).toString().contains(theData.getName())) {
    ....
    } else{
        throw new NoSuchElementException(args...);
    }