Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 标识文件中出现的单个最大数字_Java_Coding Style_Numbers_Extract_Long Integer - Fatal编程技术网

Java 标识文件中出现的单个最大数字

Java 标识文件中出现的单个最大数字,java,coding-style,numbers,extract,long-integer,Java,Coding Style,Numbers,Extract,Long Integer,让我们假设一个文本文件是一本数学教科书。我应该如何编码以找出该文件中的最大数字?我知道使用StringTokens、parseLong、split等,但我无法找到一种正确的方法来组合它们 准确地说,假设文本有如下内容: Chapter 3.5 Million has 6 zeros. Ex. 6,000,000 Billion has 9 zeros. Ex. 9,000,000,000 Trillion has 12 zeros. Ex. 8,000,000,000,000 最大的数字是8

让我们假设一个文本文件是一本数学教科书。我应该如何编码以找出该文件中的最大数字?我知道使用
StringTokens
parseLong
split
等,但我无法找到一种正确的方法来组合它们

准确地说,假设文本有如下内容:

Chapter 3.5

Million has 6 zeros. Ex. 6,000,000
Billion has 9 zeros. Ex. 9,000,000,000
Trillion has 12 zeros. Ex. 8,000,000,000,000
最大的数字是
800000000000
。我如何提取


提前感谢。

您可以使用
biginger

public class Test {

    public static void main(String[] arg) {
        String line = "215,485,454,648,464";
        String line1 = "5,454,546,545,645";

        List<BigInteger> list = new ArrayList<BigInteger>();

        list.add(new BigInteger(line.replaceAll(",", "")));
        list.add(new BigInteger(line1.replaceAll(",", "")));

        Collections.sort(list);

        System.out.println("largest: " + list.get(list.size() - 1));
    }
}

存储到目前为止看到的最大数字(最初为负无穷大),然后遍历整个文件提取每个数字,如果它大于您存储的最大数字,则存储它。最后,存储的数字是最大的数字。使用double而不是long来解释非常大的数字和非整数。查找所有整数的简单方法是使用扫描器,将next()输入parseDouble(…)并比较任何不引发NumberFormatException的内容。

最简单的方法是逐行解析文本文件

可以使用正则表达式执行此操作,以查看当前行中是否有任何数字格式。如果您这样做,那么您可以检查它是否大于先前找到的数字

如果您还没有接触到正则表达式,那么这里有一个非常好的正则表达式教程


使用扫描仪界面。此代码假定您将文件路径作为第一个参数传入。扫描仪接口处理数字中的逗号。我使用BigInteger来处理任何大小的数字

public static void main (String[] args) throws java.lang.Exception
    {
        BigInteger biggestNumber = null;
        Scanner s = new Scanner(new FileReader(args[0]));
        while( s.hasNext() ){
            if( s.hasNextBigInteger() ){
                BigInteger number = s.nextBigInteger();
                if( biggestNumber == null || number.compareTo(biggestNumber) == 1 ){
                    biggestNumber = number;
                }
            }
            else {
                s.next();
            }
        }
        System.out.println("Biggest Number: " + biggestNumber.toString());
    }
您可以在以下位置使用联机示例:。它不从文件中读取,而是在代码中使用字符串


如果这本书将大量数字分割成几行,那么这一点就会失败。我不确定你的原始资料是什么,但这是需要记住的

数学书包含许多不同形式的数字。。。科学记数法、整数、复数(我想你需要绝对值)等等,如果你只是扫描一本印刷的教科书,有些记数法可能会被弄得无法辨认。。。在开始之前,您应该以视觉方式检查足够多的文本流,以确定您感兴趣的所有不同数字格式。像阶乘之类的东西呢?如果遇到字符串
100你想把它算作100还是阶乘值?谢谢大家!这正是我所需要的。它简单易读,而且很短。一个双精度仍然不能解释非常大的数字。BigInteger将处理较大的整数。
public static void main (String[] args) throws java.lang.Exception
    {
        BigInteger biggestNumber = null;
        Scanner s = new Scanner(new FileReader(args[0]));
        while( s.hasNext() ){
            if( s.hasNextBigInteger() ){
                BigInteger number = s.nextBigInteger();
                if( biggestNumber == null || number.compareTo(biggestNumber) == 1 ){
                    biggestNumber = number;
                }
            }
            else {
                s.next();
            }
        }
        System.out.println("Biggest Number: " + biggestNumber.toString());
    }