Java初学者实现基础的股票查询工具,核心是通过调用公开的股票数据接口获取信息,再对返回的数据进行解析和展示,整个过程可以覆盖Java基础语法、网络请求、数据解析等多个核心知识点,适合用来巩固学习成果。

实现前的准备
首先需要准备一个公开的股票数据接口,这里选择免费的股票数据接口,接口返回格式为JSON,方便后续解析。同时需要了解Java中发送HTTP请求的方式,以及JSON数据的解析方法,JDK本身没有内置JSON解析功能,我们可以引入简单的JSON解析依赖,或者使用JDK自带的HttpURLConnection发送请求,再手动解析简单的JSON数据。
核心实现步骤
1. 发送HTTP请求获取股票数据
我们需要封装一个方法,接收股票代码作为参数,向数据接口发送请求,获取返回的JSON字符串。这里使用HttpURLConnection实现网络请求,避免使用第三方依赖,更符合初学者的学习场景。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class StockQueryUtil {
// 股票数据接口地址,将股票代码拼接到url中
private static final String API_URL = "http://api.ipipp.com/stock/query?code=";
/**
* 发送请求获取股票数据
* @param stockCode 股票代码
* @return 接口返回的JSON字符串
*/
public static String getStockData(String stockCode) {
StringBuilder result = new StringBuilder();
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(API_URL + stockCode);
connection = (HttpURLConnection) url.openConnection();
// 设置请求方法为GET
connection.setRequestMethod("GET");
// 设置连接超时时间
connection.setConnectTimeout(5000);
// 设置读取超时时间
connection.setReadTimeout(5000);
// 读取返回数据
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
return result.toString();
}
}
2. 解析JSON数据
接口返回的JSON数据通常包含股票名称、当前价格、涨跌幅等字段,我们需要解析这些字段并封装成Java对象,方便后续操作。这里使用简单的字符串分割方式解析基础JSON结构,避免引入第三方JSON库,降低学习难度。
public class StockInfo {
// 股票名称
private String name;
// 股票代码
private String code;
// 当前价格
private double price;
// 涨跌幅
private double changePercent;
// 构造方法、getter和setter
public StockInfo(String name, String code, double price, double changePercent) {
this.name = name;
this.code = code;
this.price = price;
this.changePercent = changePercent;
}
public String getName() {
return name;
}
public String getCode() {
return code;
}
public double getPrice() {
return price;
}
public double getChangePercent() {
return changePercent;
}
}
public class JsonParser {
/**
* 解析JSON字符串为StockInfo对象
* @param jsonStr 接口返回的JSON字符串
* @return 解析后的StockInfo对象
*/
public static StockInfo parseStockJson(String jsonStr) {
if (jsonStr == null || jsonStr.isEmpty()) {
return null;
}
try {
// 假设返回的JSON格式为{"name":"贵州茅台","code":"600519","price":1800.50,"changePercent":2.35}
// 去掉大括号
String content = jsonStr.substring(jsonStr.indexOf("{") + 1, jsonStr.lastIndexOf("}"));
String[] fields = content.split(",");
String name = "";
String code = "";
double price = 0.0;
double changePercent = 0.0;
for (String field : fields) {
String[] keyValue = field.split(":");
String key = keyValue[0].replace(""", "").trim();
String value = keyValue[1].replace(""", "").trim();
if ("name".equals(key)) {
name = value;
} else if ("code".equals(key)) {
code = value;
} else if ("price".equals(key)) {
price = Double.parseDouble(value);
} else if ("changePercent".equals(key)) {
changePercent = Double.parseDouble(value);
}
}
return new StockInfo(name, code, price, changePercent);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
3. 实现用户交互逻辑
最后需要实现一个简单的用户交互界面,支持用户输入股票代码,调用前面的方法查询数据并展示结果,这里使用控制台交互的方式,适合初学者理解。
import java.util.Scanner;
public class StockQueryTool {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎使用基础股票查询工具");
while (true) {
System.out.println("n请输入要查询的股票代码(输入exit退出):");
String stockCode = scanner.nextLine();
if ("exit".equalsIgnoreCase(stockCode)) {
System.out.println("感谢使用,再见");
break;
}
// 获取股票数据
String jsonData = StockQueryUtil.getStockData(stockCode);
if (jsonData == null || jsonData.isEmpty()) {
System.out.println("未查询到该股票的信息,请检查股票代码是否正确");
continue;
}
// 解析数据
StockInfo stockInfo = JsonParser.parseStockJson(jsonData);
if (stockInfo == null) {
System.out.println("数据解析失败,请稍后重试");
continue;
}
// 展示结果
System.out.println("股票名称:" + stockInfo.getName());
System.out.println("股票代码:" + stockInfo.getCode());
System.out.println("当前价格:" + stockInfo.getPrice() + " 元");
System.out.println("涨跌幅:" + stockInfo.getChangePercent() + "%");
}
scanner.close();
}
}
功能扩展建议
完成基础功能后,初学者可以尝试扩展工具的功能,比如添加股票历史价格查询、增加本地缓存减少接口请求次数、支持批量查询多只股票、将查询结果保存到本地文件等。这些扩展可以进一步提升对Java集合、文件操作、缓存机制等知识点的掌握程度。
注意事项
- 公开股票数据接口可能有请求频率限制,不要短时间内发送大量请求,避免被接口封禁。
- 实际开发中建议使用成熟的第三方HTTP客户端和JSON解析库,比如OkHttp、Jackson等,提升代码的稳定性和开发效率。
- 如果接口返回的数据格式发生变化,需要同步调整JSON解析的逻辑,避免解析失败。