Java數據處理(一)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章