java - 从Java中的文本文件中读取数据作为数组

标签 java arrays file

我有一个包含一堆数组的文本文件,我必须在数组中找到一个特定的数字。文本文件如下所示:

(8) {1, 4, 6, 8, 12, 22}
(50) {2, 5, 6, 7, 10, 11, 24, 50, 65}
(1) {1}
(33) {1, 2, 5, 6, 11, 12, 13, 21, 25, 26, 30, 33, 60, 88, 99}
(1) {1, 2, 3, 4, 8, 9, 100}
(1) {2, 3, 5, 6, 11, 12, 13, 21, 25, 26, 30, 33, 60, 88, 99}

括号内的数字是我必须使用二进制搜索找到的数字。剩下的就是实际的数组。 我不知道如何从文本文件中获取此数组并将其作为实际数组读取。 [这是我之前参加的编码竞赛的问题,正在复习这些问题]

我已经有了一个进行二分查找的方法,并且我已经使用扫描仪来读取这样的文件:

Scanner sc = new Scanner(new File("search_race.dat"));

并使用 while 循环来遍历文件并读取它。

但我一直在思考如何让 java 知道花括号中的内容是一个数组,而括号中的内容是它必须对所述数组使用二进制搜索才能找到的内容。

最佳答案

您可以简单地解析每一行(要查找的数字和数组)如下:

while (sc.hasNext()) {
    int numberToFind = Integer.parseInt(sc.next("\\(\\d+\\)").replaceAll("[()]", ""));

    int[] arrayToFindIn  = Arrays.stream(sc.nextLine().split("[ ,{}]"))
                                        .filter(x->!x.isEmpty())
                                        .mapToInt(Integer::parseInt)
                                        .toArray();

    // Apply your binary search ! Craft it by yourself or use a std one like below :
    // int positionInArray = Arrays.binarySearch(arrayToFindIn, numberToFind);
}

如果您不喜欢 replaceAll,您可以将循环中的第一行替换为以下两行:

    String toFindGroup = sc.next("\\(\\d+\\)");
    int numberToFind = Integer.parseInt(toFindGroup.substring(1, toFindGroup.length()-1));

干杯!

关于java - 从Java中的文本文件中读取数据作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58547927/

相关文章:

java - 处理来自 httpresponse android 的 json 的最佳方法

java - type[] varName 和 type varName[] 的区别?

java - 在java中创建一个带有字符串拆分函数的数组

javascript - 如何从数组中创建包含相同字符串的子数组?

java - Android - 从 url 下载 JSON 文件

django - 如何将 Django 应用程序测试拆分到多个文件中

php - 使用 PHP 解析 QIF 文件

Java 应用程序在 IDE 之外无法正常工作

java - 使用 Notes.jar 获取给定日期的所有日历条目

java - jvisualvm 去哪儿了?