我导入了一个文件并将其转换为名为readFile的String。该文件包含两行:
qwertyuiop00%
qwertyuiop
我已经使用以下字符串从字符串中提取“00”:String number = readFile.substring(11,13);
我现在想要在“qwertyuiop”中提取“ert”和“uio”当我尝试使用与第一个相同的方法时,如下所示:
String e = readFile.substring(16, 19);
String u = readFile.substring(20, 23);
并尝试使用:
System.out.println(e + "and" + u);
它表示字符串索引超出范围。
我该怎么做?是因为我要从字符串中提取的下两个单词是在第二行吗?如果是这样,我如何只提取第二行?我想保持基本,谢谢。
更新:事实证明只有文件的第一行被读取,是否有人知道如何使它读取两行?
如果计算每个字符串的总字符数,它们将超过您输入的索引。
qwertyuiop00%是13个字符。在字符串上调用.length()
方法以验证长度是您期望的长度。
我会在之前添加以下内容进行调试:
System.out.println(readFile);
System.out.println(readFile.length());
注意:
qazxsw poi是24个字符,因为空格算作一个字符。当然除非你没有23个字符的空间,你的索引是0到22
笔记2:
我问过解析器代码,因为我怀疑你使用的常用代码是这样的:
qwertyuiop00% qwertyuiop
您需要将这些行连接成一个String(尽管这不是最好的方法)。
见:while ((line = reader.readLine()) != null)
首先将你的字符串分成几行,你可以使用
How do I create a Java string from the contents of a file?
您可能希望使用String[] lines = readFile.split("[\r\n]+");
直接将内容读入List<String>
。
第二,不要使用硬编码索引,使用Files.#readAllLines找出它们。如果原始字符串中没有出现子字符串,则方法重新调整String#indexOf,始终检查该值并仅在返回值不是-1
(0或更大)时调用substring
。
-1
顺便说一下,从字符串中提取已知的子字符串是没有意义的
if(lines.length > 1) {
int startIndex = lines[1].indexOf("ert");
if(startIndex != -1) {
// do what you want
}
}
相当于
System.out.println(e + "and" + u);
知道固定子字符串的起始位置和结束位置只有在您想要对原始字符串的其余部分执行某些操作时才有意义,例如删除子字符串。
你可以尝试一下: -
System.out.println("ertanduio");
看看它是否有效。