1 簡介
主講Java數據計算。
使用的包。
import java.text.DecimalFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
2 保留有效數字
/**
* 商計算,保留有效數字
*
* @param a 被除數
* @param b 除數
* @return 商
*/
public String significantDigits(int a, int b) {
float c = 0.0f;
String cStr = null;
c = (float) a / b;
System.out.println("division result:" + c);
// 保留兩位有效數字
DecimalFormat df = new DecimalFormat("0.00");
cStr = df.format(c);
return cStr;
}
3 List數據
3.1 排序
- 函數
/**
* 列表中指定字段排序
*
* @param dataLis 包含map的列表
* @return 排序後的列表
*/
public List listSort(List dataLis) {
Collections.sort(dataLis, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> m1, Map<String, Object> m2) {
String score1 = (String) m1.get("score");
String score2 = (String) m2.get("score");
return score1.compareTo(score2);
}
});
return dataLis;
}
- 主程序
public static void main(String[] args) {
App app = new App();
List personInfosLi = new ArrayList();
Map personInfosMap1 = new HashMap() {
{
put("name", "xiaohei");
put("score", "100");
}
};
Map personInfosMap2 = new HashMap() {
{
put("name", "xiaohua");
put("score", "190");
}
};
Map personInfosMap3 = new HashMap() {
{
put("name", "xiaolan");
put("score", "099");
}
};
personInfosLi.add(personInfosMap1);
personInfosLi.add(personInfosMap2);
personInfosLi.add(personInfosMap3);
List liSortRes = app.listSort(personInfosLi);
System.out.println("list sort result:" + liSortRes);
}
- 結果
list sort result:[{score=099, name=xiaolan}, {score=100, name=xiaohei}, {score=190, name=xiaohua}]
- 注意
map中用於比較的鍵值爲字符串,且字符串長度一致,否則無法得到正確的結果,如使用分數,若兩位數和三位數分數比較,兩位數的分數前添加0,如099,110,130。
3.2 拼接
將List拼接爲包含指定字符的字符串。
package basic.datatype.dataformat;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.Arrays;
public class DataFormatTest{
private static void arrayToStr(){
String[] dataStrArr = {"xiao", "da", "diandian"};
List dataLi = Arrays.asList("xiao", "hei");
String dataStr = String.join(",", dataLi);
// String dataStr = Arrays.toString(dataStrArr);
// String dataStr = String.valueOf(dataStrArr);
System.out.println("data string:"+dataStr);
}
public static void main(String[] args){
arrayToStr();
}
}
3.3 提取
- 代碼段
List<String> listExtract = Arrays.asList("name", "address", "sex", "position", "salary", "height", "age")
System.out.println("Extract datas:"+listExtract.subList(2,4));
- 結果
Extract datas:[sex, position]
- 解析
subList用於提取List指定位置的和長度的數據,原型:
subList(index, offset)
其中,index爲索引(從0計數),offset爲位置(從1計數),如subList(2,4),索引爲2,位置爲4,索引從0開始計數,位置從1開始計數。
4 字符串數組切割
Java中使用split方法對包含特定字符的字符串進行切割,返回字符串數組。
分割使用雙反斜線加上待切割的字符完成切割。
package basic.datatype.dataprocess;
public class DataProcessUtil {
public static String[] splitString(String symbol, String datas){
String[] splitStr = null;
if(symbol.equals("")){
splitStr = datas.split("\\");
return splitStr;
}else{
splitStr = datas.split("\\"+symbol);
return splitStr;
}
}
public static void splitStringIterator(String[] datas){
for(int i=0;i<datas.length;i++){
System.out.println("data:"+datas[i]);
}
}
public static void main(String[] args){
String dataStr1 = "Hello|world";
String dataStr2 = "Hello,world";
String[] resStr1 = splitString("|", dataStr1);
String[] resStr2 = splitString(",", dataStr2);
splitStringIterator(resStr1);
splitStringIterator(resStr2);
}
}
5 輸入數據
- 代碼段
Scanner inputData = new Scanner(System.in);
System.out.println("Please input your name:");
// String format
String name = inputData.nextLine();
System.out.println("Name:"+name);
// Integer format
System.out.println("Please input your age:");
Integer age = inputData.nextInt();
System.out.println("Age:"+age);
// Double format
System.out.println("Please input your salary:");
Double salary = inputData.nextDouble();
System.out.println("Salary:"+salary);
- 結果
Please input your name:
xiaoxiao
Name:xiaoxiao
Please input your age:
20
Age:20
Please input your salary:
15000.99
Salary:15000.99
- 解析
Scanner爲輸入對象,用於存儲輸入數據,通過不同方法存儲對應類型的數據
序號 | 類型 | 方法 |
---|---|---|
1 | 字符串 | nextLine() |
2 | 整型 | nextInt() |
3 | 單精度浮點型 | nextFloat() |
4 | 雙精度浮點型 | nextDouble() |
6 &與&&
- &
完全執行所有語句,進行最終判斷。
Map<String, String> a = new HashMap();
if(a.get(“name”)!=null&a.get(“name”)!="") - &&
部分執行,當出現爲false時,直接判斷,停止執行後面的判斷語句。
if(a.get(“name”)!=null&&a.get(“name”)!="")
當a.get(“name”)==null時,若使用&,會繼續執行後面的語句,此時會空指針異常,若使用&&,則會直接跳出,不執行後面的語句。
【參考文獻】
[1]https://blog.csdn.net/qmdweb/article/details/86524223
[2]https://blog.csdn.net/CHITTY1993/article/details/51732501
[3]https://www.cnblogs.com/xiaoxiaohui2015/p/5838674.html
[4]https://blog.csdn.net/qq_41181772/article/details/83653875