2012-11-05 117 views
0

這裏我的問題是,我想要一個字符刪除字符串的某些部分,但我不知道如何限制刪除。刪除字符串中的某些字符,Java

例子:

A computer is a general purpose device that can be\n 
programmed to carry out a finite set of\n 
millions to billions of times more capable.\n 
\n 
In this era mechanical analog computers were used\n 
for military applications.\n 
1.1 Limited-function early computers\n 
1.2 First general-purpose computers\n 
1.3 Stored-program architecture\n 
1.4 Semiconductors and\n 

這個這裏的例子是我的字符串的內容,我想發生什麼事是消除以上,但沒有線1和2的\n在第5行中刪除\n起。 如何刪除\n而不刪除其他\n。我的目標是讓字符串成爲段落後沒有\n的段落。像例子中的前3行可以是一個段落,下一行是子彈形式(例子)。我在說的是我不想刪除帶有條目符號的\n

字符串的真實內容是動態的。

我一直在使用String.replaceAll("\n", " ")以及明確試過那就沒辦法了它會刪除所有\n我已經想到了用Regex,以確定哪些是Alphanumberic但經過\n

+1

如果它是動態的,你怎麼知道從線1和2中刪除只要?你所得到的例子也不明確。你說從第1行和第2行刪除,但不是從第5行開始。第二個標準是多餘的。請在您的問題中添加更多細節。 – Simon

+0

生病編輯內容 –

+0

如果我重申你的問題是「我怎樣才能從字符串中刪除所有新的行字符,除非新行是空行或行以數字開頭」這是否準確? – Simon

回答

10

嘗試使用此正則表達式: -

str = str.replaceAll("(.+)(?<!\\.)\n(?!\\d)", "$1 "); 
System.out.println(str); 

這將取代你的\n如果是not precededdot - termination of a paragraph,它是not followeddigit,因爲當它後面是一個bulleted點。 (比如,你的\n在第一個項目符號後面跟着1.2,所以它不會被替換)。

  • (.+)在開始時,確保您沒有更換blank line

這將適用於您顯示的字符串。

說明: -

  • (.+) - >甲捕獲組,捕捉什麼,發生至少一次。

  • (?<!\\.) - >這稱爲negative-look-behind。它與它後面的string匹配,只有在該字符串沒有在negative-look-behind模式中給出的dot(.)之前。
    例如: -您不需要替換\n後面的行: - millions to billions of times more capable.\n

  • (?!\\d) - >這稱爲negative -look-ahead。它匹配它後面的字符串,僅當該字符串沒有跟隨negative-look-ahead模式中給出的digit (\\d)時。
    例如: -在您的項目符號點中,computers\n後面跟着1.21是一個數字。所以,你不想取代那\n

  • 現在,$1$2代表模式匹配中捕獲的組。既然你只是想替換"\n"。因此,我們將剩餘的模式匹配原樣進行,而用space替換"\n"

所以,$11st group表示 - (.+)

注意,look-aheadlook-behind正則表達式是non-capturing組。

有關詳細信息,請參見以下鏈接: -

+0

這也將刪除前兩段之間的空白行。 – Simon

+0

@Simon。好。現在編輯。感謝您指點。 :) –

+0

@RohitJain感謝您的回答和時間。我用正則表達式不好,它讓我困惑。 –

2

它會刪除一些信件我懷疑你的要求是的刪除第1行和第2行的\ n。
可以執行的操作是如下:

  • 分裂您串成段,

  • String []數組= yourString.split( 「\ n」);

  • 的concat每段通過添加\ N TAG,除線1,2-

  • 陣列[1] +陣列[2] +陣列[3] + '\ n' +陣列[4] +' \ n」 ...... //等 提出