java处理批量科学计数法数据,并排序

来源:互联网 发布:商务通js代码 编辑:程序博客网 时间:2024/06/07 06:43

直接贴出代码:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Reader {

public static String[] read(String fileName) throws IOException {    File file = new File(fileName);    int num;    StringBuffer sb = new StringBuffer();    if (!file.exists()) {        file.createNewFile();    }    DataInputStream din = new DataInputStream(new FileInputStream(file));    byte[] data = new byte[1024];    while ((num = din.read(data, 0, 1024)) != -1) {        sb.append(new String(data, 0, num));    }    return sb.toString().split("s+");}public static ArrayList<String> NumberString(String str) {    // 去除收尾空格    str = str.trim();    // 保存分割后的数字    ArrayList<String> array = new ArrayList<>();    boolean start;// 连续数字字符开始的标志    start = false;    boolean point = false;// 浮点数标识    boolean negative = false;// 负数标识    boolean addChar = false; //加号标识    boolean scenNum = false;// 科学计数标识    double Num;    if (str != null && !("".equals(str))) {        StringBuilder number = new StringBuilder();// 暂时保存数字        for (int i = 0; i < str.length(); i++) {            if ((str.charAt(i) >= 48 && str.charAt(i) <= 57)) {                start = true;                if (negative == true) {                    number = number.append('-');                    negative = false;                }                if (point == true) {                    number.append('0');                    number.append('.');                    point = false;                }                if (addChar == true) {                    number = number.append('+');                    addChar = false;                }                number = number.append(str.charAt(i));            } else if (str.charAt(i) == '-') {                negative = true;            } else if (str.charAt(i) == '.') {                point = true;            } else if (str.charAt(i) == 69) {                number = number.append(str.charAt(i));            }else if(str.charAt(i) == '+'){                addChar = true;            }else if (str.charAt(i) != 69                    || (str.charAt(i) < 48 && str.charAt(i) > 57)) {                if (negative == true) {                    negative = false;                }                if (point == true) {                    point = false;                }                if (addChar == true) {                    addChar = false;                }                start = false;                if (number.length() != 0) {                    String temp = number.toString();                    number = new StringBuilder();                    array.add(temp);                }            }            // 最后一位字符为数字时,需要特殊处理            if (i == str.length() - 1) {                if (number.length() != 0) {                    String temp = number.toString();                    number = new StringBuilder();                    array.add(temp);                }            }        }    }    return array;}public static void main(String args[]) {    try {        String[] array = read("F://RSN1182_CHICHI_CHY006-V.AT2");        ArrayList<String> doubleArray = NumberString(array[0].toString());        ArrayList<Double> praseArrayList = new ArrayList<>();        for (int i = 0; i < doubleArray.size(); i++) {            try{                BigDecimal bd = new BigDecimal(doubleArray.get(i).toString());                String temp=bd.toPlainString();//转换为String                for (int j = 0; j < temp.length(); j++) {                    if (temp.charAt(j) == '-') {                        temp = temp.replace("-", "");                    }                }                praseArrayList.add(Double.parseDouble(temp.toString()));            }catch(Exception e){            }        }        double[] arrayOrder = new double[praseArrayList.size()];        for (int i = 0; i < praseArrayList.size(); i++) {            arrayOrder[i] = praseArrayList.get(i);        }         Arrays.sort(arrayOrder);// 升序排序            for (double i : arrayOrder) {                System.out.println(i);// 遍历输出            }    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}

}

原创粉丝点击