簡體   English   中英

Java 正則表達式 - 使用 String 的 replaceAll 方法替換換行符

[英]Java Regex - Using String's replaceAll method to replace newlines

我有一個字符串,想簡單地將其中的所有換行符替換為字符串" --linebreak-- "

只寫:

string = string.replaceAll("\n", " --linebreak-- ");

我對它的正則表達式部分感到困惑。 換行符需要兩個斜杠嗎? 這夠好嗎?

不要使用正則表達式! 您只需要一個純文本匹配來替換"\\n"

使用replace()將文字字符串替換為另一個:

string = string.replace("\n", " --linebreak-- ");

請注意, replace()仍然替換所有出現, replaceAll()也是如此 - 區別在於replaceAll()使用正則表達式進行搜索。

使用以下正則表達式:

 s.replaceAll("\\r?\\n", " --linebreak-- ")

UNIX和Windows操作系統只有兩個換行符。

由於Java 8正則表達式引擎支持\\R表示任何行分隔符(更多信息: https//stackoverflow.com/a/31060125/1393766 )。

因此,如果您可以訪問Java 8,則可以使用

string = string.replaceAll("\\R", " --linebreak-- ");

不需要2個backslashes

 String string = "hello \n world" ;
 String str = string.replaceAll("\n", " --linebreak-- ");
 System.out.println(str);

輸出= hello --linebreak-- world

只是為了完整性添加它,因為2反斜杠是真實的。

請參閱以下SO問題中的@dasblinkenlight答案(談論\\ t但它也適用於\\ n):

java,正則表達式,需要在正則表達式中轉義反斜杠

“轉義序列有兩種解釋:首先是Java編譯器,然后是regexp引擎。當Java編譯器看到兩個斜杠時,它用一個斜杠替換它們。當有一個斜杠后,Java取代它使用制表符;當存在雙斜杠時,Java會將其單獨保留。但是,因為兩個斜杠已被單個斜杠替換,所以regexp引擎會看到\\ t,並將其解釋為制表符。“

對於新線路,有一個屬性

System.getProperty("line.separator")

在這里你的例子,

string.replaceAll("\n", System.getProperty("line.separator"));

看起來不錯。 你不想要2個反斜杠。

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum

就我而言,我想用文字 '\n' 替換,所以我用另一個\ \這樣

String input = "a\nb\nc\nd";
/*
a
b
c
d 
*/
input = input.replace("\n", "\\n");
System.out.println(input); // a\nb\nc\nd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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