2010-06-16 3 views
55

번으로 여러 번 요청했지만 작동하지 않습니다. 나는이 n 및 r n을 (를) <br /> (자바)

String str = "This is a string.\nThis is a long string."; 

같은 문자열이 내가

str = str.replaceAll("(\r\n|\n)", "<br />"); 

를 사용 <br />\n을 대체하기 위해 노력하고있어하지만 \n 교체지고 있지 않습니다. 확인을 위해이 RegEx Tool을 사용해 보았는데 동일한 결과가 나타납니다. 입력 문자열에 "(\r\n|\n)"과 일치하는 문자열이 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

+0

나는 또한 시도했다 "(\\ r \\ n | \\ n)"' –

+2

더 완벽한 예제를 게시 할 수 있을까요? 나는 당신이 게시 한 코드에 오류가 없다고 생각한다. –

+1

나는 거의 같은 두 줄을 가지고 있고, replaceAll() 후에 브레이크 포인트를 가지고 이클립스에서 디버그 모드로 테스트하고 있었다. –

답변

106

나를 위해 작동합니다.

public class Program 
{ 
    public static void main(String[] args) { 
     String str = "This is a string.\nThis is a long string."; 
     str = str.replaceAll("(\r\n|\n)", "<br />"); 
     System.out.println(str); 
    } 
} 

결과 :

 
This is a string.<br />This is a long string. 

귀하의 문제는 다른 곳이다.

0

작동해야하지만 알아 내려고하지 마십시오. 그냥 2 패스를 사용하십시오.

str = str.replaceAll("(\r\n)", "<br />"); 
str = str.replaceAll("(\n)", "<br />"); 

면책 조항 : 이것은 그리 효율적이지 않습니다.

+0

두 개의 대체 작업을 수행하는 경우 정규식은 필요하지 않으며 간단히 수행 할 수 있습니다. 'str = str.replace ("\ r \ n", "
") .replace ("\ n", "
");' –

+0

@ BartK 나는 String 클래스에'replace (String, String)'이 있다고 생각하지 않는다. 'replace (Char, Char)' –

+4

@Bala 만 찾았습니다. 그런 방법은 없습니다. 그러나 대체 (CharSequence, CharSequence)가 있습니다. 'String' **은 ** CharSequence입니다. –

0

이렇게하면됩니다. 당신은 두 개의 슬래시이 Reference에서

str = str.replaceAll("(\\r\\n|\\n)", "<br />"); 

에 넣어 필요가

private final String REGEX = "\\d"; // a single digit 

내가 내 프로젝트의 많은 두 개의 슬래시를 사용하고 보여주는 예이며 잘 작동하는 것 같다!

+2

실제로 두 개의 슬래시가 필요하지 않습니다. –

+4

'(\\ r \\ n | \\ n)'과'(\ r \ n | \ n)'모두 사용할 수 있습니다. –

+0

귀하의 참조가 나머지 답변과 관련이 있는지 확실하지 않습니다. * "당신은 두 개의 슬래시를 넣어야합니다."* 솔직히 말해서 틀린 말입니다. 내가 말했듯이 –

19

당신이 시도하는지의 좀 더 강력한 버전 :

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />"); 
+4

더 긴 방법을 사용할 필요가 없습니다. 'String'의 replaceAll (...)은 그 배후에 있습니다. 이것은 메서드 본문입니다.'return Pattern.compile (expr) .matcher (this) .replaceAll (대체)': http://www.docjar.com/html/api/java/lang/String.java.html –

+0

좋은! 다음 내 대답에서 중복 된 코드를 제거했습니다. – Dolph

2

그것은 나를 위해 작동합니다. Java 코드는 작성한대로 작동합니다. 테스터에서 입력 문자열은 다음과 같아야합니다.

This is a string. 
This is a long string. 

... 실제 줄 바꿈이 있어야합니다. 당신은 사용할 수 없습니다

This is a string.\nThis is a long string. 

를 ... 그것은 문자 그대로의 순서 백 슬래시 'n'을으로 \n을 취급하기 때문이다. 나를 위해

15

,이 일 :

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n"); 

팁 : 내 계정 I가-투표 니노 반 Hooff의 대답은 할 수 없습니다 새 때문에 환경

+10

거기에 백 슬래시가 충분하지 않다고 생각합니다. –

+1

나는 같은 문제가있었습니다. 출력은 "\ n"을 보여 주지만 작동하려면 "\\\\ n"의 문자열을 출력 결과로 "\ n", 따라서 잘못된 해석 :) –

8

에서 컴파일하지 않고 빠른 테스트 regex tester를 사용합니다.이중 백 슬래시를 단일 슬래시 탈출로 해석되고있다으로

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />"); 

이상한 문자 집합 문제가 될 것 같습니다 : 당신의 문자열이 같은 영문 기반의 서버로 윈도우 기반의 소스에서 오는 경우,이 솔루션은 작업 수행 문자. 따라서 위의 4 배 슬래시가 필요합니다.

다시 말하지만 대부분의 경우 "(\\r\\n|\\n)"이 작동해야하지만 문자열이 Windows 기반 소스에서 나온 것이라면 위와 같이 시도하십시오.

문제를 해결하기 위해 모든 노력을 기울였습니다. 해당 줄 끝 바꾸기가있었습니다. 처음에는 생각이 Windows-1252에서 UTF-8으로 변환되지 못했습니다. 그러나 그것도 작동하지 않았다. 이 솔루션은 결국 마술을했습니다. :)

관련 문제