Java - 将字符串转换为列表
问题描述:
这是将字符串转换为列表的正确方法吗?Java - 将字符串转换为列表
List styles = (List)request.getParameter("styles");
Model (BeerExpert.java)
package com.example.model;
import java.util.*;
public class BeerExpert {
public List getBrands(String color){
List brands = new ArrayList();
if(color.equals("amber")){
brands.add("Jack Amber");
brands.add("Red Moose");
}
else{
brands.add("Jail Pale Ale");
brands.add("Gout Scott");
}
return brands;
}
}
下一个是servlet类
BeerSelect.java
package com.example.web;
import com.example.model.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class BeerSelect extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice <br>");
String c = request.getParameter("color");
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
request.setAttribute("styles", result);
RequestDispatcher view = request.getRequestDispatcher("results.jsp");
view.forward(request, response);
}
}
最后的JSP。
results.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1 align="center">Beer Recommendations in JSP!!!</h1>
<%
List styles = (List)request.getParameter("styles");
Iterator it = styles.iterator();
while(it.hasNext()){
out.print("<br> try " + it.hasNext());
}
%>
</body>
</html>
感谢
答
根据您提供的额外的servlet/JSP背景下,似乎真正错在你的代码是在JSP页面中使用的request.getParameter
:该方法确实返回String
,你不能转换一个String
在List
,而不是转换,甚至没有任何其他语言或数据结构允许的操作。您可以插入一个String
成List
,使用已经提出的方法中的一种(或变换一个List
到使用其他方法String
),但从这不是你所需要的编码判断。
在servlet代码,您将styles
属性到List
含有啤酒品牌。因此,要获得List
,您需要调用request.getAttribute
而不是getParameter
。 getAttribute
方法返回一个Object
,这实际上是一个List
,并且您知道因为您已将它设置为这样,所以在这种情况下,强制转换恰好是以原始类型返回值所需的操作。在代码中,这意味着在您的JSP中,代替为您带来麻烦的行,您的代码为
List styles = (List) request.getAttribute("styles");
。
答
这不,你在做什么是试图投一个String
到List
,这是不一样的。 A cast不转换对象,它只是试图告诉什么类型一个对象是。
你需要做的是:
List<String> list = new LinkedList<String>();
list.add(request.getParameter("styles"));
答
如果你想找回更多的“风格”,你可以使用:
request.getParameterValues("styles")
,将返回字符串数组,这可能是用于创建列表如下:
List<String> styles = java.util.Arrays.asList(request.getParameterValues("styles"))
答
List<String> list = Arrays.asList(yourString);
请记住,您将无法更改列表的内容。如果您需要这样做,请手动创建另一个列表。
“请求”的类型是什么? –
你想要将一个字符串转换为基于...什么,到底是什么?你想要一个字符串中所有字符的列表吗?你想分割特定分隔符上的字符串吗?或者你只是想将字符串插入列表中? –
或者'request.getParameter(..)'返回'Object',在这种情况下,已知'styles'将产生一个List类型的对象......没有更多的信息就无法分辨出来。 –