[英]How to extract words from a string in Java
我导入了一个文件并将其转换为名为 readFile 的字符串。 该文件包含两行:
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());
笔记:
qwertyuiop00% qwertyuiop
是 24 个字符,因为空格算作一个字符。 除非当然你没有23个字符的空间,你的索引是0到22
笔记2:
我要求提供解析器代码,因为我怀疑您使用的是通常的代码,例如:
while ((line = reader.readLine()) != null)
您需要将这些行连接成一个字符串(尽管这不是最好的方法)。
请参阅: 如何从文件内容创建 Java 字符串?
首先将您的字符串分成几行,您可以使用
String[] lines = readFile.split("[\r\n]+");
您可能希望使用Files.#readAllLines将内容直接读入List<String>
。
其次,不要使用硬编码索引,使用String#indexOf找出它们。 如果原始字符串中没有出现子字符串,则方法返回-1
,始终检查该值并仅在返回值不为-1
(0 或更大)时才调用substring
。
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");
知道固定子字符串的开始和结束位置只有在您想对原始字符串的其余部分做一些事情时才有意义,例如删除子字符串。
你可以试试这个:-
Scanner sc=new Scanner(new FileReader(new File(The file path for readFile.txt)));
String st="";
while(sc.hasNext()){
st=sc.next();
}
System.out.println(st.substring(2,5)+" "+"and"+" "+st.substring(6,9));
检查它是否有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.