簡體   English   中英

Java正則表達式幫助需要拆分字符串! 如何忽略空行?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM