import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedHashMap;
import java.util.Map;
public class Application {
/**
* 定义需要读取的文件的名称,放在项目主目录或者使用绝对路径
*/
private static final String FILE_NAME = "stock_price.txt";
/**
* 定义时间格式化字符串
*/
private static final String PATTERN = "yyyy-MM-dd";
/**
* 定义sql server驱动
*/
private static final String DRIVER_NAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
/**
* 初始化时间格式化类
*/
private static final SimpleDateFormat SDF = new SimpleDateFormat(PATTERN);
public static void main(String[] args) {
//从文件读取数据
Map<String, String> stocks = readFromFile();
//将数据转化为单调递增区间打印
printMomotone(stocks);
//从数据库读取数据
readFromDB();
}
/**
* 从文件读取数据
* @return 日期,价格的map
*/
private static Map<String, String> readFromFile() {
BufferedReader reader = null;
Map<String, String> stocks = new LinkedHashMap<String, String>();
try {
File file = new File(".");
File txtFile = new File(file.getCanonicalPath() + File.separator + FILE_NAME);
reader = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile), "UTF-8"));
String line = null;
/**
* 按行读取
*/
while ((line = reader.readLine()) != null) {
String[] lines = line.split("\\s+");
String price = lines[0].trim();
String priceDate = lines[1].trim();
stocks.put(priceDate, price);
}
//排序并打印
sortAndPrint(stocks);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return stocks;
}
/**
* 对map的key进行排序
* @param stocks
* @return
*/
private static String[]sortKeys(Map<String,String>stocks){
String[] keys = stocks.keySet().toArray(new String[] {});
for (int i = 0; i < keys.length; i++) {
for (int j = 0; j < i; j++) {
swap(keys, i, j);
}
}
return keys;
}
/**
* 打印输出
* @param stocks
*/
private static void sortAndPrint(Map<String, String> stocks) {
String[] keys = sortKeys(stocks);
System.out.println("按日期升序结果:");
for (String key : keys) {
System.out.println(String.format("%s %s", key, stocks.get(key)));
}
}
/**
* 从数据库读取
*/
private static void readFromDB() {
Connection conn = getConnection();
String sql = "select * from data_stk_prc";
Statement stm = null;
ResultSet rs = null;
Map<String, String> stocks = new LinkedHashMap<String, String>();
try {
stm = conn.createStatement();
rs = stm.executeQuery(sql);
while (rs.next()) {
stocks.put(rs.getString("date"), rs.getString("price"));
}
/**
* 排序可考虑数据库进行实践格式化并按升序排列
*/
sortAndPrint(stocks);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stm != null) {
try {
stm.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 数组排序
* @param eles
* @param i
* @param j
*/
private static void swap(String[] eles, int i, int j) {
long time1 = stringToTimestamp(eles[i]);
long time2 = stringToTimestamp(eles[j]);
if (time1 < time2) {
String temp = eles[i];
eles[i] = eles[j];
eles[j] = temp;
}
}
/**
* 将字符串转化为时间方便对比,或者直接字符串大小对比
* @param d
* @return
*/
private static long stringToTimestamp(String d) {
try {
return SDF.parse(d).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return -1L;
}
/**
* 获取数据库连接,可以集成mybatis
* @return
*/
private static Connection getConnection() {
/**
* 硬编码或配置文件读取数据库信息
* 需要在classpath下增加sql server的驱动
*/
String dbURL = "jdbc:sqlserver://10.132.20.115:1433;DatabaseName=KSDB";
String userName = "ksuser";
String userPwd = "123@pwd";
try {
Class.forName(DRIVER_NAME);
Connection dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
return dbConn;
} catch (Exception e) {
e.printStackTrace();
System.out.print("连接失败");
}
return null;
}
/**
* 打印打掉区间
* @param stocks
*/
private static void printMomotone(Map<String,String> stocks){
String[] keys = sortKeys(stocks);
float temp = -1F;
int start = 0;
for(int i=0;i<keys.length;i++){
Float current = Float.valueOf(stocks.get(keys[i]));
/**
* 针对当前场景下的单调区间
*/
if(current<temp){
System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),keys[i-1],stocks.get(keys[i-1])));
start = i;
}
if(i==keys.length-1 && current>temp){
System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),keys[keys.length-1],stocks.get(keys[keys.length-1])));
}else if(i==keys.length-1){
System.out.println(String.format("[%s %s,%s %s]",keys[start],stocks.get(keys[start]),"-","-"));
}
temp = current;
}
}
}
机试代码
最新推荐文章于 2023-06-21 00:13:58 发布