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", " ");
많이 검색 한 후 다른 모든 라인에서 실패하여 완벽하게 작동했습니다.