[java] Java에서 파일에서 줄 바꿈을 제거하는 방법은 무엇입니까?

Windows 및 Linux에서 작동하는 방식으로 Java에서 문자열의 모든 줄 바꿈을 바꾸려면 어떻게해야합니까 (예 : 캐리지 리턴 / 줄 바꿈 / 줄 바꿈 등의 OS 관련 문제 없음)?

시도했습니다 (readFileAsString은 텍스트 파일을 문자열로 읽는 함수입니다).

String text = readFileAsString("textfile.txt");
text.replace("\n", "");

그러나 이것은 작동하지 않는 것 같습니다.

이것을 어떻게 할 수 있습니까?



답변

다음 text의 결과 로 설정해야합니다 text.replace().

String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

이것은 문자열이 변경 불가능하기 때문에 필요합니다. 호출 replace하면 원래 문자열이 변경되지 않고 변경된 새로운 문자열이 반환됩니다. 에 결과를 할당하지 않으면 text새 문자열이 손실되고 가비지 수집됩니다.

모든 환경에서 개행 문자열을 얻는 방법은 전화를 통해 사용할 수 있습니다 System.getProperty("line.separator").


답변

다른 답변에서 언급했듯이 대상이 변경되지 않기 때문에 코드가 주로 작동 String.replace(...)하지 않습니다 String. ( replace실제로는 Java 문자열을 변경할 수 없습니다!) 실제로 String필요한 것은 문자가 변경되면 새 객체 를 만들어 반환하는 것 입니다. 그러나 코드는 그것을 버립니다 String


가능한 해결책은 다음과 같습니다. 어떤 것이 가장 정확한지 정확히 무엇을 하려는지에 달려 있습니다.

// #1
text = text.replace("\n", "");

개행 문자를 모두 제거하기 만하면됩니다. 이것은 Windows 또는 Mac 회선 종료에 대응하지 않습니다.

// #2
text = text.replace(System.getProperty("line.separator"), "");

현재 플랫폼에 대한 모든 줄 종결자를 제거합니다. 이것은 Windows에서 UNIX 파일을 처리하려는 경우 또는 그 반대의 경우에는 대응하지 않습니다.

// #3
text = text.replaceAll("\\r|\\n", "");

모든 Windows, UNIX 또는 Mac 줄 종결자를 제거합니다. 그러나 입력 파일이 텍스트 인 경우 단어를 연결합니다. 예 :

Goodbye cruel
world.

된다

Goodbye cruelworld.

따라서 실제로 이것을하고 싶을 수도 있습니다.

// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");

각 줄 종결자를 공백으로 바꿉니다. Java 8부터는 다음을 수행 할 수도 있습니다.

// #5
text = text.replaceAll("\\R", " ");

여러 줄 구분 기호를 하나의 공백으로 바꾸려면 다음을 수행하십시오.

// #6
text = text.replaceAll("\\R+", " ");


답변

현재 OS에서 유효한 줄 종결자를 제거하려면 다음을 수행하십시오.

text = text.replaceAll(System.getProperty("line.separator"), "");

줄 구분 기호를 제거하려면 다음과 같이하십시오.

text = text.replaceAll("\\r|\\n", "");

또는 약간 더 장황하지만 정규식이 적습니다.

text = text.replaceAll("\\r", "").replaceAll("\\n", "");


답변

이 기능 은 줄 바꿈을 포함한 모든 공백을 단일 공백으로 정규화합니다. 원래 질문이 정확히 요구 한 것은 아니지만 많은 경우에 필요한 것을 정확하게 수행 할 가능성이 있습니다.

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);


답변

이것은 효율적인 것 같아요

String s;
s = "try this\n try me.";
s.replaceAll("[\\r\\n]+", "")


답변

str = str.replaceAll("\\r\\n|\\r|\\n", " ");

많이 검색 한 후 다른 모든 라인에서 실패하여 완벽하게 작동했습니다.


답변

줄 바꿈은 windows / linux / mac에서 동일하지 않습니다. line.separator 속성과 함께 System.getProperties 를 사용해야합니다 .