【问题标题】:Looping the query results of elements of an arraylist循环arraylist元素的查询结果
【发布时间】:2013-09-19 12:39:21
【问题描述】:

所以我有这个 List strarray 作为输入,它有 [Aa, Bb, Cc,..] 形式的字符串 我需要对列表中的每个元素运行相同的查询。让用户选择要保留的结果,然后将这些结果添加到字符串中。 字符串的输出应如下所示:“Aa.(Aaqueryresult1,Aaqueryresult2,...) \n Bb.(Bbqueryresult1,Bbqueryresult2,...) \n Cc.Ccqueryresult1,Ccqueryresult2,...)"

我的代码没有返回任何结果,因为我可能正在处理循环问题。有什么建议可以让我完成这项工作吗?

public static List<String> strarray = new ArrayList<String>() ;

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

        String selec1 = strarray.get(i);


        String queryString2 =
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +        
                "PREFIX owl: <http://www.w3.org/2002/07/owl#> " +
                "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
                "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
                "PREFIX bi: <#> " +

    "SELECT ?X " +
    " WHERE {?X bi:has_input <"+selec1+">} " ;

        Query query2 = QueryFactory.create(queryString2);

        QueryExecution qe2 = QueryExecutionFactory.create(query2, model);
        com.hp.hpl.jena.query.ResultSet results3 =  qe2.execSelect();
        ResultSet results4 = ResultSetFactory.copyResults(results3);
        final ResultSet results5 = ResultSetFactory.copyResults(results4);

        System.out.println("==== Available Options ====");
        ResultSetFormatter.out(System.out, results4, query2);


        System.out.println( "== Select Option ==" );
        System.out.println( "== Type 0,1,2,3.. to choose ==" );

        Scanner input = new Scanner( System.in );
        final String inputs ;
        inputs = input.next();


   final String[] indices = inputs.split("\\s*,\\s*");


        final List<QuerySolution> selectedSolutions = new ArrayList<QuerySolution>( indices.length ) {{
            final List<QuerySolution> solutions = ResultSetFormatter.toList(results5);
            for ( final String index : indices ) {
                add( solutions.get( Integer.valueOf( index )));
            }
        }};


        String s = selectedSolutions.toString();


         String newstr;
          newstr = s.replaceAll("_", "");

          List<String> temp1 = new ArrayList<String>() ;

          Pattern p = Pattern.compile("#([^>]+)>");
           Matcher m = p.matcher(newstr);


           while (m.find()) {
               temp1.add(m.group(1));
            }         

           String selecfin = null;

           for(int j =0;j<temp1.size(); j++){
           String selecP = temp1.get(j);

           selecfin = selec1+".("+selecP+")";
           System.out.println(selecfin);
           }
           System.out.println(selecfin);
        }

【问题讨论】:

  • 你没有得到任何结果是什么意思?你有无限循环吗?你看到任何系统输出了吗?
  • 对不起,我的意思是它运行但在查询中它没有显示循环内的任何结果,而查询正常工作。这就好像它不是一个一个地读取 strarraylist 的元素,以便查询它们并给出结果。所以在“====可用选项====”下面我没有得到任何选项。结果集似乎没有任何初始化。所以我猜在循环中没有正确读取 select1
  • 不是无限循环。输入数组最多有 10 个元素

标签: java eclipse loops jena


【解决方案1】:

查询中的输入有问题。忘了我之前在代码中替换了 _ 。所以查询不会识别个人。问题解决了。谢谢

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多