2017-05-16 34 views
3

我的程序從文件中讀取一些必須進行後處理的字符串。文件中的原始文本看起來像修整字符串中的多個字符

A1DY^ 
BLKSS^ 
"GH67^"^ 

其中^是我用來演示的空格字符。正如你可以看到文件中的所有單詞都以空格結束。有些單詞是雙引號的。我想將這些字符串存儲在我的程序中

A1DY 
BLKSS 
GH67 

換句話說,我想修剪所有空格和雙引號。如果我使用str.trim();它將刪除最後一個空格。所以,第三行將是"GH67^"。我也用str.replaceAll("^\"|\"$", "");來修剪雙引號。結果是​​。這意味着,我必須再次修剪它。

有沒有更好的方法一次刪除所有空格和雙引號?請注意,我不想提取字母數字字符。我想修剪特殊字符。

+0

這項工作? https://stackoverflow.com/questions/1805518/replacing-all-non-alphanumeric-characters-with-empty-strings –

+0

提取字母數字。如果我在文件中有'DS-DK ^',我想保存'DS-DK'。 – mahmood

+0

使用'\ 0'而不是空格可能更有用,因爲'\ 0'永遠不會用作字符。 – AppWriter

回答

3

這將削減任何數量從字符串的開頭或結尾報價或空間:

str = str.replaceAll("^[ \"]+|[ \"]+$", ""); 
+2

爲了防止常見的新手錯誤,請在前面添加'str ='。 – Andreas

+0

從技術上講,去除領先空間與OP的要求相反,但它可能沒有區別。 – Andreas

+0

@Andreas你在哪裏看到的? – shmosel

0

在你的問題描述的嚴格解釋,你只需要尾隨空格去掉,沒有前導空格而不是其他空白字符,如製表符(\t)。

另外,如果找到了前導和尾隨對,並且只有一個這樣的集合,則嚴格的裁剪功能將僅刪除雙引號。

如果存在雙引號,則雙引號內的尾隨空格也應該被刪除。

爲了實現這一切,嚴格,在一個單一的正則表達式的操作,做到這一點:

str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2"); 

此正則表達式使用^$錨,以確保它僅針對整個字符串相匹配。

前導"是可選的,並且與捕獲組1匹配(如果存在)。尾部"僅在前導"匹配的情況下匹配,並且只有匹配尾隨"時才匹配前導"。這是通過使用\1反向引用可選的前導"完成的。如果匹配,它們將從結果中刪除。

未刪除前導空格,但刪除了可選尾部"之前和/或之後的任何尾隨空格。

任何未刪除的內容都將在組2中捕獲,並保留在替換字符串中。

相關問題