我有一个包含一堆数组的文本文件,我必须在数组中找到一个特定的数字。文本文件如下所示:
(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/