【问题标题】:Query a part of string from an ArrayList从 ArrayList 中查询部分字符串
【发布时间】:2017-04-05 16:38:57
【问题描述】:

我在 Java 中使用下面的 couchbase 查询来获取特定值的数组列表。

Statement statement = select("PlanningId").from(i(CouchbaseBucket.RangePlan.toString()))
                         .where(x("meta().id").like(s("PRODUCTOPTION%")).and(x("Status").eq(s("Ready"))));

    String[] planningIDs = couchbaseRepository.getQueryResult(bucket, statement);

这会将输出返回为:

[{"PlanningId":"PRODUCTPLANNING_666"}, {"PlanningId":"PRODUCTPLANNING_777"}]

我需要只有值的输出:

[{"PRODUCTPLANNING_666"}, {"PRODUCTPLANNING_777"}]

我无法使用子字符串或拆分来获取此信息。 我将如何实现这一目标?

谢谢 伊姆兰

【问题讨论】:

  • 如果您只想处理生成的字符串数组planningIds,您需要创建另一个字符串数组,您可以在其中实际存储所需的值,例如PRODUCTPLANNING_666, PRODUCTPLANNING_777,...
  • 如果我需要创建一个新的数组列表,请告诉我。如果那我如何只插入其中的一部分?
  • 请澄清一件事,您是在String 数组还是ArrayList 中得到这个[{"PlanningId":"PRODUCTPLANNING_666"}, {"PlanningId":"PRODUCTPLANNING_777"}]。查看您的代码 sn-p,我猜您正在调用 Arrays.toString(planningIds)。对吗?
  • 是的。它是一个 ArrayList。我目前将其称为 String 进行值测试。
  • 在这种情况下,您的ArrayList 持有哪些对象?它包含PlanningId 类型的对象还是仅包含String 对象?

标签: java arraylist substring couchbase


【解决方案1】:

如 cmets 中所述,在每个查询中,如果返回的结果包含单个 String,例如:{"PlanningId":"PRODUCTPLANNING_666"}, {"PlanningId":"PRODUCTPLANNING_777"},....,则仅提取 {"PRODUCTPLANNING_XXX"},... 所需部分的过程可以如下完成:

假设你有一个像

这样的字符串

String planningIds = {"PlanningId":"PRODUCTPLANNING_666"}, {"PlanningId":"PRODUCTPLANNING_777"},....{"PlanningId":"PRODUCTPLANNING_NNN"}

如果您想在单个String 中捕获每个{"PRODUCTPLANNING_XXX}

StringBuilder finalResult = new StringBuilder();
        String[] results = allPlanningIds.split(",");
        for(String eachPlanningId : results){
            String[] resultPlanningIds = eachPlanningId.split(":");
            if(resultPlanningIds.length != 2){
                continue;
            }
            String result = "{" + resultPlanningIds[1];
            finalResult = finalResult.append(result + ",");
        }
        System.out.println(finalResult);

或者如果您想在ArrayList 中将每个{"PRODUCTPLANNING_XXX} 捕获为单独的String 对象,在上面的代码sn-p 中,将StringBuilder finalResult = new StringBuilder(); 更改为List<String> finalResults = new ArrayList<>();

finalResult = finalResult.append(result + ",");finalResults.add(result)

我希望这就是你要找的。​​p>

注意:请检查String[] results数组的结束/空条件。

【讨论】:

  • 嗨,我已经尝试过使用单独的字符串对象,我得到的输出为[{"PRODUCTPLANNING_666"}, {"PRODUCTPLANNING_777"}]]。我得到了一个额外的]。不知道为什么?
  • 那是因为,原来的String 末尾包含],这将是String[] results 数组中最后一项的一部分。如果您想跳过它,您可以对最终结果执行subString() 操作。
猜你喜欢
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多