[英]Java regex help needed to split string please! How to ignore an empty line?
我是正則表達式的完整入門者,我需要拆分字符串方面的幫助。 我正在輸入以下數據
665 11% R 1 908K 388K fg root top
61 1% S 42 152404K 29716K fg system system_server
38 0% S 1 840K 340K fg root /system/bin/qemud
114 0% S 16 120160K 19156K fg radio com.android.phone
這不過是您的常規頂部輸出。 我打算做的是選擇像這樣的條目
655 11% R 1 fg root top
現在,我用來執行以下操作的代碼是
while ((inputLine = in.readLine()) != null)
{
String[] segs= inputLine.split("[ ]+");
str[i] = segs[0]+" "+segs[1]+" "+segs[2]+" "+
segs[3]+" "+segs[6]+" "+segs[7]+" "+segs[8];
Log.v("TOP Output", str[i]);
i++; j++;
}
但是我面臨的問題是,我上logcat是
java.lang.ArrayIndexOutOfBoundsException
我要去哪里錯了,我可以做些什么來防止這種情況。 感謝您的幫助。
編輯:閱讀評論后,我意識到我的輸出中有幾個空行。 因此,在這種情況下,我應該如何忽略這些行。 我知道我應該匹配大小寫,但是我不確定表達式或語法!
您不需要字符類(方括號)。 在正則表達式中,空格是常規字符,因此:
String[] segs = inputLine.split(" +");
除此之外, 假設數組索引沒有進行范圍檢查是錯誤的樣式,而ArrayIndexOutOfBoundsException
正是您所要求的。
最好明確地做一下:
String re = "^\\s*(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\s+(\\S+)\\s+(\\S+)\\s*$";
Pattern p = Pattern.compile(re, Pattern.MULTILINE);
Matcher m = p.matcher(yourInputString);
while (m.find())
{
// do stuff with m.group(1) through m.group(9)
}
這樣可以確保您匹配的每一行都滿足您的期望,並且每個匹配器組也包含您的期望。
免責聲明:對於該正則表達式,我並不感到特別自豪。 實際上,這很丑陋,但是它說明了顯式比隱式更可靠和可預測的觀點。 而且它有潛力被改進為一個版本,該版本可以比字符串拆分更准確地匹配所需的部分。
使用以下正則表達式,並檢查每行的數組長度! 並且還考慮使用StringBuilder或StringBuffer代替串聯。
String[] s = inputLine.split("[\\s\\t]+");
此輸出的一致性如何? 在每一列中總有一個值嗎? 如果是這樣,請嘗試以下操作:
line = line.replaceFirst("(?:\s+\d+[KM]?){3}", "");
您不必擔心這種方法的空行,因為正則表達式不匹配它們。
注意str實例化有多大,因為它是一個數組。 您應該使用列表或其他任何內容,因為您不知道輸入的行數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.