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

本文介绍了一个Java程序,该程序用于从指定文件中读取内容,并从中提取和解析数字字符串,将其转换为数字数组并进行排序输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接贴出代码:
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();
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值