我需要阅读的董事会示例如下:
现在,“测试文件”仅是板的名称,并且不会存储在阵列中。 “ 3 3”部分指定了电路板的尺寸,但也不会读入阵列。我需要读入数组的唯一位是这些行下面的字符。
这是我的代码:
if let pdf = PDFDocument(url: url) {
let pageCount = pdf.pageCount
let documentContent = NSMutableAttributedString()
for i in 1 ..< pageCount {
guard let page = pdf.page(at: i) else { continue }
guard let pageContent = page.attributedString else { continue }
documentContent.append(pageContent)
}
}
只有在我解释自己尝试背后的原因时,我才觉得有帮助。首先,我仅通过阅读其中的一行并获取其长度就设法找到了no.columns。其次,我设法通过遍历文件并计算行数来找到行数,然后减去2,以解决先前不需要的行数。这样,我得到了数组的尺寸;行和列。
下一部分,我发现更加棘手。我再次遍历文件,并检查变量lineCount是否大于1(以解释前面的行)。如果是这样,则将数组 rowN 指定为等于我们想要的第一行字符的不同字符。在这之后,我陷入困境,并且已经尝试了一段时间以解决此问题。谢谢您的时间!
答案 0 :(得分:0)
我不明白为什么您尝试从文本文件的尺寸中获取电路板尺寸,如果您可以直接从所述文件中读取它的话。 在我看来,您当前尝试执行此操作的方式似乎包含一些错误:
col = boardInput.nextLine().split("").length;
如果您查看测试文件的9列,这将为您提供帮助,因为测试文件的第一行:“测试文件”包含9个字符,但是面板只有3个宽。
像现在一样确定行也将带来问题,因为boardInput.hasNextLine()
直到您实际使用boardInput.nextLine()
移至下一行之前都不会改变,因此从本质上讲,这里有一个无限的while循环。 / p>
修复此问题实际上非常容易,因为该文件包含有关列和行的信息:
String name = boardInput.nextLine(); // Store the name of the board so the next line can be processed.
String[] rowAndCol = boardInput.nextLine().split(" "); // Takes the second line and splits it into its two parts.
// Parse the two Strings to integers(Assuming the first number is the row and the second is the column):
int row = Integer.parseInt(rowAndCol[0]);
int col = Integer.parseInt(rowAndCol[1]);
现在解决了,现在该解决您实际提出的问题了。首先,您需要制作一个代表您的木板的二维数组,然后在每一行中填充字符。实际上,填充数组非常容易,因为您可以通过单个函数调用将String转换为chars数组:
char[][] board = new char[row][];
for(int r = 0; r < row; r++) {
board[r] = boardInput.nextLine().toCharArray();
}
需要注意的一件有趣的事情是,您甚至不需要知道创建正确数组的列数(假设文件格式正确)。