java比较两个数组,在JSP中只检索完全匹配的数组,同时保留下拉列表中的显示顺序
我想将用户品牌显示为选项窗格和下拉列表中需要显示的选定元素。当条件-->brands.contains(brand.toLowerCase().trim())
被选中时,将显示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>
<%}
}
如果我尝试使用以下两个循环,则不会维持顺序,即下拉列表中先出现选定循环,然后出现未选定循环:
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.get("brand").toLowerCase()
从数据库中得到的选项才能在选项中显示为选中的选项(而不是任何额外的选项,比如在第一个代码段中击球),而且下拉列表中品牌的显示顺序与原始数组保持相同-->brandslist[]
。第一个代码片段可以通过一些操作完成这项工作
# 1 楼答案
您需要使用
equals
方法来比较值,而不是contains
。此外,在下面的代码中,我添加了额外的变量found
,通过与userBrands
数组进行比较来检查brandslist
中是否存在值,并根据该变量的不同,将options
选为selected
或不选。i、 e: