android:텍스트문장비교하기
텍스트문장비교하기
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
android:텍스트문장비교하기 [2025/05/03 02:11] – 라이브러리 소개 이거니맨 | android:텍스트문장비교하기 [2025/05/04 01:37] (현재) – 이거니맨 | ||
---|---|---|---|
줄 87: | 줄 87: | ||
===== Java-diff-utils ===== | ===== Java-diff-utils ===== | ||
- | ==== 소개 ==== | + | ==== 1. 소개 ==== |
텍스트를 비교하는 글자로 자바진영에는 [[https:// | 텍스트를 비교하는 글자로 자바진영에는 [[https:// | ||
줄 96: | 줄 96: | ||
^ 제시어 | ^ 제시어 | ||
- | | Be wise in what is good and innocent in what is evil | Be wise in < | + | | Be wise in what is good and innocent in what is evil | Be wise in < |
+ | |||
+ | |||
+ | ==== 2. 설치 ==== | ||
+ | |||
+ | 모듈단계의 그래들 파일((build.gradle.kts (Module :app) ))에 다음의 의존성을 추가한다. | ||
+ | |||
+ | <code kotlin> | ||
+ | // Java Diff - phrase difference compare util | ||
+ | implementation(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 3. 사용예제 ==== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | <code kotlin> | ||
+ | @Composable | ||
+ | @Throws(DiffException:: | ||
+ | fun TestGenerator_Second() | ||
+ | val first = listOf(" | ||
+ | val second = listOf(" | ||
+ | |||
+ | val generator = DiffRowGenerator.create() | ||
+ | .showInlineDiffs(true) | ||
+ | .inlineDiffByWord(true) //show the ~ ~ and ** ** around each different word instead of each letter | ||
+ | .oldTag { f: Boolean? -> " | ||
+ | .newTag { f: Boolean? -> " | ||
+ | .build() | ||
+ | |||
+ | val rows: List< | ||
+ | |||
+ | rows.forEach() { | ||
+ | // Text(text = it.oldLine, color = Color.Yellow) | ||
+ | Text(text = richtextFromMarkdown(it.oldLine, | ||
+ | Text(text = richtextFromMarkdown(it.newLine, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | generator.generateDiffRows(비교군, | ||
+ | |||
+ | 그런데 위 예제에서 비교군(oldLine)에서는 차이점이 있는 부분의 앞뒤에 " | ||
+ | |||
+ | 전후에 마크다운을 삽입하는 것보다는 텍스트의 스타일을 바꾸는 것 - 예를 들어 중간선을 넣는다거나, | ||
+ | |||
+ | ==== 4. 마크다운을 스타일화된 텍스트로 바꾸기 ==== | ||
+ | |||
+ | Jetpack compose에서 제공하는 AnnotatedString을 이용하면 스타일화된 텍스트를 만들 수 있다. | ||
+ | |||
+ | 마크다운으로 차이가 있는 부분에만 강조해주는 것이므로 다음과 같이 마크다운을 주심으로 텍스트를 나눈 후에 짝수부분에만 스타일을 설정해 주면 된다. | ||
+ | |||
+ | <code kotlin> | ||
+ | // 마크다운 텍스트를 리치스타일로 변환하는 유틸 | ||
+ | fun richtextFromMarkdown(inputText : String, divider : String) : AnnotatedString | ||
+ | { | ||
+ | val listOfString = inputText.split(divider) | ||
+ | val oldLineStyle = SpanStyle(color = Color.Red) | ||
+ | val newLineStyle = SpanStyle(color = Color.Blue, textDecoration = TextDecoration.LineThrough) | ||
+ | |||
+ | val formattedString = buildAnnotatedString { | ||
+ | listOfString.forEachIndexed() { index, s -> | ||
+ | if (index % 2 == 0) { | ||
+ | append(s) | ||
+ | }else { | ||
+ | withStyle(if (divider == " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | return formattedString | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 5. 두 텍스트 사이의 차이점을 점수화하기 ==== | ||
+ | |||
+ | ' | ||
+ | |||
+ | https:// | ||
+ |
android/텍스트문장비교하기.1746205865.txt.gz · 마지막으로 수정됨: 2025/05/03 02:11 저자 이거니맨