Java 比较两个数组以仅检索JSP中的精确匹配,同时保留下拉列表中的显示顺序

Java 比较两个数组以仅检索JSP中的精确匹配,同时保留下拉列表中的显示顺序,java,jsp,Java,Jsp,我想在选项窗格和下拉列表中显示userBrands作为所选元素,需要显示完整的品牌列表。选中条件->brands.containsbrand.toLowerCase.trims时,将显示bat、cat和batting元素,而不是仅显示bat和cat String brands=""; String userBrands[]=new String[30]; String brandslist[]= {"bat", "cat", "ant", "batting", "antenna"}; if(u

我想在选项窗格和下拉列表中显示userBrands作为所选元素,需要显示完整的品牌列表。选中条件->brands.containsbrand.toLowerCase.trims时,将显示bat、cat和batting元素,而不是仅显示bat和cat

String brands="";
String userBrands[]=new String[30];
String brandslist[]= {"bat", "cat", "ant", "batting", "antenna"};

if(user.get("brand")!=null && !user.get("brand").isEmpty()){
    brands = user.get("brand").toLowerCase();
    System.out.println("BRANDS: " + brands);        //here bat and cat retrieved from the database //Output: BRANDS: bat, cat
    userBrands = brands.split(",");
}

for(String brand:brandslist){
    if(brands.contains(brand.toLowerCase().trim())){%>
<option selected="selected" value="<%=brand.trim().toLowerCase()%>"><%=brand.trim()%></option>
    <%}else{%>
<option value="<%=brand.trim().toLowerCase()%>"><%=brand.trim()%></option>
    <%} 
}
如果我尝试使用以下2个循环,则不会维持顺序,即下拉列表中先出现选定循环,然后出现未选定循环:

if(user.get("brand")!=null && !user.get("brand").isEmpty()){
    brands = user.get("brand").toLowerCase();
    System.out.println("BRANDS: " + brands);
    userBrands = brands.split(","); 
}

        for(int p=0; p<brandlist.length; p++){
            brandlist[p]=brandlist[p].trim().toLowerCase();
        }
        for(int q=0; q<userBrands.length; q++){
            userBrands[q]=userBrands[q].trim().toLowerCase();
        }

        List<String> masterList = new ArrayList<String>();
        List<String> selectedList = new ArrayList<String>();
        List<String> unSelectedList = new ArrayList<String>();

        masterList = Arrays.asList(brandlist);

        for(int i=0; i<userBrands.length; i++){
            for(int j=0; j<brandlist.length; j++){
                if(userBrands[i].trim().equalsIgnoreCase(brandlist[j].trim())){
%>
                <option selected="selected" value="<%=userBrands[i].trim()%>"><%=userBrands[i].trim()%></option>
<%
                }
            }
    }
        selectedList = Arrays.asList(userBrands);

        for(String ms: masterList){
            unSelectedList.add(ms);
            for(String s: selectedList){
                if(s.equalsIgnoreCase(ms)){
                    unSelectedList.remove(s);
                }
            }
        }
        for(String unStr: unSelectedList){%>
            <option value="<%=unStr.trim()%>"><%=unStr.trim()%></option>
        <%}%>
我所希望的是,只有通过user.getbrand.toLowerCase从数据库中获得的选项才能在选项中显示为选中的选项,而不是像在第一个代码段中击球那样额外显示,而且下拉列表中品牌的显示顺序与原始数组->brandslist[]相同。第一个代码段可以进行一些操作。

您需要使用equals方法来比较值,而不是contains。此外,在下面的代码中,我添加了额外的变量find,通过与userBrands数组进行比较来检查brandslist中是否有值,以及将选择或不选择的选项,即:

 <%
    String brands="";
    String userBrands[];
    String brandslist[]= {"bat", "cat", "ant", "batting", "antenna"};

    if(user.get("brand")!=null && !user.get("brand").isEmpty()){
    brands = user.get("brand").toLowerCase();
    System.out.println("BRANDS: " + brands);      
    userBrands = brands.split(",");
    }

     //out.println(Arrays.toString(userBrands));

    // to check if value there or not
    boolean found;        
    for(int i= 0 ;i<brandslist.length ;i++){
          found = false;
     for(int j= 0 ;j<userBrands.length ;j++){
        if(userBrands[j].equals(brandslist[i].toLowerCase().trim())){ %>
   <option selected='selected' value='<%=brandslist[i].toLowerCase().trim()%>'><%=brandslist[i].trim()%></option>
       <%
             //value there 
            found = true;
        }


    }
       //value not there found will remain false and below code will get executed
        if(!found){ %>
  <option value='<%=brandslist[i].trim().toLowerCase()%>'><%=brandslist[i].trim()%></option>
        <%}
    }%>