[英]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.