2011-04-27 102 views
1

說我有一個java源文件保存到像這樣的字符串變量。在java問題中替換字符串

String contents = Utils.getTextFromFile(new File(fileName)); 

說,目前仍然在源文件中的文字,像這樣

String x = "Hello World\n"; 

通知末尾的換行符行。

在我的代碼,我知道的Hello World的存在,但不Hello World\n 等於是一個電話

String search = "Hello World"; 
contents = contents.replaceAll(search, "Something Else"); 

將失敗,因爲該換行符。我怎樣才能讓它匹配一個或多個換行符?難道這是一個正則表達式我添加到結尾search變量?

編輯:

我用變量替換字符串文字。我知道文字,但我不知道他們是否有換行符。這是我替換之前的代碼示例。對於replacment,我知道application running at a time.存在,但不是application running at a time.\n\n

int option = JOptionPane.showConfirmDialog(null,"There is another application running. There can only be one application\n" + 
"application running at a time.\n\n" + 
"Press OK to close the other application\n" + 
"Press Cancel to close this application", 
"Multiple Instances of weh detected", 
JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE); 

這裏是我的更換

int option = JOptionPane.showConfirmDialog(null,"There is another application running. There can only be one application\n" + 
"application running at a time.\n\n" + 
"Press OK to close the other application\n" + 
"PRESS_CANCEL_TO_CLOSE", 
"MULTIPLE_INSTANCES_OF", 
JOptionPane.OK_CANCEL_OPTION, 
JOptionPane.ERROR_MESSAGE); 

請注意,所有不帶換行的文字中被替換後的例子,如"Multiple Instances of weh Detected"是現在"MULTIPLE_INSTANCES_OF",但所有的新行都沒有。我在考慮有一些正則表達式可以添加到它處理一個或多個換行符時嘗試全部替換。

+0

應該不存在'\ n'存在。你是否也想要刪除'\ n'? – Jeremy 2011-04-27 17:14:04

+0

出於某種原因,所有沒有換行符的'Hello World's都被替換了,但所有那些都沒有。 – user663321 2011-04-27 17:14:48

+0

'contents = contents.replaceAll(「Hello World」,「Something Else」);'應該讓您的示例文本爲「Something Else \ n」。你想它只是「別的東西」嗎? – 2011-04-27 17:15:19

回答

0

正如評論者所說,\ n不應該搞砸了。但是,如果你可以刪除新行,你可以試試這個:

contents = contents.replaceAll(「search」+「\\ n *」,「Something Else」);

1

很好,因爲它實際上是一個正則表達式,如你可以嘗試這樣的事情作爲第一個參數

String search = "[^]?[H|h]ello [W|w]orld[\n|$]?" 

這會爲你好世界各地開始搜索的第一個參數和的年底通過它有一個\ n或不是。

有點多餘和說,它不應該的問題,但... apparantly它

嘗試它(使它漂亮,使其符合資本以及普通字母:P ...只是overdoin吧)

+0

[\ n | $]?如果放置爲[$]​​,甚至會更好?因爲\ n被識別爲行($)的結尾。 – youri 2011-04-27 17:40:38

1

如果您只替換字符串文字,並且您可以更換每個出現的文字(不只是第一個字符),那麼您應該使用replace method而不是replaceAll。

你的第一個例子應該改成這樣:

String search = "Hello World"; 
contents = contents.replace(search, "Something Else"); 

該做的replaceAll正則表達式替換,而不是一個字符串替換。這通常比較慢,對於您的用例來說不是必需的。

請注意,這個答案假設尾隨的換行符可以留在字符串中(你說你在評論中可以使用)。

1
String search = "Hello World\n\n\n";       
search.replaceAll ("Hello World(\\n*)", "Guten Morgen\1"); 

\ 1捕獲第一組,由(......)標記,從左括號開始計數。 \ n +對於換行符是\ n,但反斜線需要在Java中被屏蔽,導致出現兩個反斜槓。 *表示0到n,所以它會捕獲0,1,2,...新行。

0

根據你的問題,你需要通過以下charator

公共字符串的replaceAll(字符串的正則表達式,字符串替換)

這兩個參數 -

regex – the regular expression to match 
replacement – the string to be substituted for every match 

其他一些方法: -

replace(char oldChar, char newChar) 
replace(CharSequence target, CharSequence replacement) 
replaceFirst(String regex, String replacement) 

示例爲

import java.lang.String; 

public class StringReplaceAllExample { 

public static void main(String[] args) { 

String str = "Introduction 1231 to 124 basic 1243 programming 34563 concepts 5455"; 

String Str1 = str.replaceAll("[0-9]+", ""); 

System.out.println(Str1); 

Str1 = str.replaceAll("[a-zA-Z]+", "Java"); 

System.out.println(Str1); 

} 

}