간단한 Java 서버 응용 프로그램을 만들려고하는데 BufferedReader를 사용하여 사용자 입력을 올바르게 읽으려고합니다. 문제는 줄 구분 기호가 CR LF ("\ r \ n") 인 경우에만 발생하므로 readLine() 표준 방법을 사용할 수 없습니다. 내가 얻을 결과 인쇄하려고하면 지금BufferedReader로 CR LF 라인을 읽는 방법?
private String readCRLFLine(BufferedReader in) {
StringBuilder result = new StringBuilder();
char cr = 'a'; // initialize cr
char lf;
try {
while (((lf = (char) in.read()) != '\n') && (cr != '\r')) {
cr = lf;
result.append(lf);
}
result.deleteCharAt(result.length() - 1); // delete \r from the result
} catch (IOException ex) {
// handle the exception here
}
return result.toString();
}
: 따라서, 나는 내 자신의 방법을 구현하기 위해 노력
while ((userMessage = readCRLFLine(inputStream)) != null) {
System.out.println(userMessage);
break;
}
를 ... 그것은 첫 번째 휴식 시간에 문자의 순서를 인쇄 ("\ r"또는 "\ n"), 나머지 입력은 메소드 의 두 번째 호출에 의해 읽혀집니다. readCRLFLine (inputStream) - 이미 다른 입력을 읽어야합니다.
내가 좋아하는 입력을 처리 할 수 있어야합니다 :
"ABC \ rabc \ n 개의 \의 r은 \ ABC \ 연구 \ 없음"이 경우 userMessage에서
은 다음과 같아야합니다
"ABC \ rabc \ n 개의 \ 연구 \ abc 방송"
나는 스캐너를 사용할 수 있으며 "useDeli입니다 TIMEOUT을 "clientSocket.setSoTimeout (TIMEOUT)"으로 설정해야하고 내가 아는 바에 따르면 Scanner에서는이 방법을 사용할 수 없기 때문에 "meter ("\ r \ n ")"메서드를 사용하면됩니다.
내 "readCRLFLine"방법에 어떤 문제가 있습니까? 이 문제에 대한 다른 해결책이 있습니까?
도움을 주시면 감사하겠습니다.
BufferedReader.readLine()이 CRLF를 지원하지 않는다고 생각하는 이유가 무엇입니까? 그렇습니다. 또한 스캐너 또는 다른 클래스에서 소켓 InputStream을 읽었는지 여부에 관계없이 소켓에서 시간 초과를 설정하는 기능은 변경되지 않습니다. –
BufferedReader.readLine() : javadoc에서 "줄 바꿈 ('\ n'), 캐리지 리턴 ('\ r') 또는 캐리지 리턴 중 하나에 의해 종료 된 것으로 간주됩니다. 줄 바꿈. " 내 줄은 "\ r \ n"-> "에 의해 구분됩니다. 따라서"\ n "과"\ r "은 줄 바꿈으로 간주되어서는 안됩니다. – Filco28
@ Filco28 그래서 만약 한 줄에'\ n'이나'\ r'이 하나 있다면 그 줄을 한 줄로보기를 원합니다. 참고 : 대부분의 텍스트 편집기는 이것을 기려하기 때문에 설명하는 내용이 일반 텍스트 파일이 아닙니다. –