특정 단락이 들여 쓰기되도록 텍스트를 파일에 저장하고 싶습니다 (단락의 각 행은 들여 쓰기됩니다). BufferedWriter
또는 Scanner
등을 사용하고 있습니다. 캐릭터를 세지 않고 어떻게해야합니까?들여 쓰기 된 텍스트를 파일에 작성하십시오.
0
A
답변
2
모든 개행을 찾아 각 개행 후에 적절한 갯수의 공백을 삽입해야합니다.
그래서 코드는 항상 각 문자를보고 필요에 따라 텍스트를 파싱하여 어디에서 얼마나 들여 쓰기를 할 지 찾아야합니다.
구문 분석 및 서식을 처리하는 java.io.Writer
을 구현할 수 있습니다. char 버퍼를 직접 사용하는 것이 가장 효율적이지만, 새로운 String을 생성하고 String 함수를 사용하는 것보다 훨씬 복잡합니다. 따라서 일반적으로 효율성이 높아지기 전에 안정성을 유지하는 것이 가장 좋습니다.
들여 쓰기가 전체 파일에서 동일하면 간단한 String.replaceAll()을 수행하고 줄 바꿈을 개행 문자 다음에 공백 개수로 바꿀 수 있습니다. 동적 들여 쓰기가 필요하다면, 들여 쓰기 레벨이 변경된 곳을 파싱 (찾기)하고, 개행이나 들여 쓰기 레벨이 변경되면 각 문자를 확인하고, 지금은 복잡해집니다.
0
다음은 솔루션입니다. 이 접근법은 은 모든 개행을 들여 쓰기으로 바꿉니다. 수준을 들여 쓰려면 indent()
전화가 필요합니다. 들여 쓰기를하려면 unindent()
메서드를 호출하십시오.
public class IndentPrintWriter extends java.io.PrintWriter
{
private boolean newLine;
private String singleIndent = " ";
private String currentIndent = "";
public IndentPrintWriter(Writer pOut, String indent)
{
super(pOut);
this.singleIndent = indent;
}
public void indent()
{
currentIndent += singleIndent;
}
public void unindent()
{
if (currentIndent.isEmpty()) return;
currentIndent = currentIndent.substring(0, currentIndent.length() - singleIndent.length());
}
@Override
public void print(String pString)
{
// indent when printing at the start of a new line
if (newLine)
{
super.print(currentIndent);
newLine = false;
}
// strip the last new line symbol (if there is one)
boolean endsWithNewLine = pString.endsWith("\n");
if (endsWithNewLine) pString = pString.substring(0, pString.length() - 1);
// print the text (add indent after new-lines)
pString = pString.replaceAll("\n", "\n" + currentIndent);
super.print(pString);
// finally add the stripped new-line symbol.
if (endsWithNewLine) println();
}
@Override
public void println()
{
super.println();
newLine = true;
}
}
관련 문제
- 1. Sass/SCSS 브래킷 들여 쓰기 들여 쓰기
- 2. UITableView 들여 쓰기 편집 들여 쓰기
- 3. 테이블에 들여 쓰여진 텍스트 들여 쓰기
- 4. 들여 쓰기 접기 텍스트
- 5. vim에서 들여 쓰기가 자동으로 들여 쓰기 된 코드
- 6. 개별 QTreeWidgetItem 들여 쓰기
- 7. 들여 쓰기 추가
- 8. 들여 쓰기 된 블록을 인식하는 Lexer
- 9. 가변 폭의 들여 쓰기 된 div
- 10. 들여 쓰기 된 부모/자식 이름 표시
- 11. 들여 쓰기 된 테두리를 구현하는 방법
- 12. 들여 쓰기 된 계층 적 테이블 구조
- 13. cout으로 단락 들여 쓰기
- 14. 들여 쓰기/들여 쓰기/들여 쓰기 수준을 이해하는 .NET Console TextWriter
- 15. 특정 줄을 파일에 작성하십시오.
- 16. 흐름 문서 또는 WPF RichTextBox에서 들여 쓰기 들여 쓰기 만들기
- 17. 인코딩 된 객체를 파일에 쓰기
- 18. 이맥스에서 이클립스 들여 쓰기
- 19. 빔 벙어리 들여 쓰기?
- 20. Java 출력 들여 쓰기
- 21. Jalopy 주석 들여 쓰기
- 22. PYDEV에서 들여 쓰기 제거하기
- 23. NSTextView에서 자동 들여 쓰기
- 24. html 코드 들여 쓰기
- 25. TextMate 들여 쓰기 감지
- 26. 라텍스 알고리즘의 들여 쓰기
- 27. 자동 들여 쓰기 꺼짐
- 28. 동적 들여 쓰기
- 29. xml 들여 쓰기
- 30. 자바 모드 들여 쓰기
음, 어떤 수업을 사용하고 있습니까? 왜 문자 수를 세 필요가 있습니까? 이미 어떤 시도를 했습니까? 그렇다면 코드를 볼 수 있습니까? – Jeffrey
BufferedWriter를 사용하고 있지만, 나는 무엇이든 상관 없다. 내가 사용할 적절한 클래스를 찾을 수 없기 때문에 나는 어떤 시도도하지 않았다. 나는 캐릭터를 셀 수 있다고 생각하지 않지만, 실행 가능한 해킹이다. 소크라테스 주셔서 감사합니다. –
주어진 단락의 들여 쓰기를 결정하는 알고리즘이 필요합니다. 그거 있니? –