Servlet 中 System.out.println(words) 輸出 [Ljava.lang.String;@11b886b7,因為 words 是陣列,直接列印會調用 Object.toString() 產生「類型@哈希碼」。
String[] words = { sb.toString() }; // ❌ 只有一個元素,且該元素是整個逗號分隔字串
// ...
for (int i = 0; i < words.length; i++) {
if (words[i].startsWith(key)) { ... } // 實際只跑一次,邏輯錯誤
}
System.out.println(words); // 輸出陣列物件地址
words 定義為 String[] 但只塞入一個長字串,非分割後的多個關鍵字。println(陣列) 不會自動展開內容。// 1. 正確分割字串為陣列
String[] words = sb.toString().split(","); // 假設 sb 以逗號分隔
// 2. 正確列印陣列內容
System.out.println(Arrays.toString(words)); // [關鍵字1, 關鍵字2, ...]
// 或 Java 8+
Arrays.stream(words).forEach(System.out::println);
protected void service(HttpServletRequest req, HttpServletResponse resp) {
String key = req.getParameter("SearchText");
if (key == null || key.isEmpty()) return;
List<String> matched = new ArrayList<>();
try (Connection conn = ConnDB.getConn();
PreparedStatement ps = conn.prepareStatement("SELECT Names FROM info");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
String name = rs.getString("Names");
if (name != null && name.startsWith(key)) {
matched.add(name);
}
}
} catch (SQLException e) { /* log & handle */ }
// 直接序列化 List 為 JSON (需 Jackson/Gson)
resp.setContentType("application/json;charset=UTF-8");
new ObjectMapper().writeValue(resp.getWriter(), matched);
}
WHERE Names LIKE 'key%' 下推過濾,減少網傳資料。try-with-resources 自動關閉資源。JSON.parse。核心:陣列列印用 Arrays.toString(),業務邏輯應在 SQL 層過濾,返回結構化資料而非手工拼字串。