拆分字符串插入游标标识时换行位首字符被替换如何解决
问题根因
该异常是不同系统换行符的编码差异导致的:Windows 系统的换行符为双字符\r\n,Unix、Linux、macOS 系统的换行符为单字符\n。当游标位置刚好落在\r和\n中间时,插入的下划线会被放到两个字符之间,渲染文本时\r会将输出光标拉回当前行的行首,后续的\n以及下一行的首个字符就会从行首开始覆盖显示,看起来就像下划线替换了新行的第一个字符。
解决方案
方案一:统一换行符格式(推荐)
先将所有双字符换行替换为单字符,消除双字符换行带来的游标偏移问题,再执行拆分插入操作:
// 统一将\r\n替换为\n,抹平系统换行符差异 String normalizedText = text.replace("\r\n", "\n"); String before = normalizedText.substring(0, cursorPosition); String after = normalizedText.substring(cursorPosition); return before + "_" + after;
方案二:保留原始换行符格式,修正游标位置
如果需要保留原始文本的换行符格式,可以提前判断游标位置是否落在\r和\n中间,若是则向后调整游标位置,避开分隔双字符换行:
int adjustedCursor = cursorPosition; // 校验游标是否刚好卡在\r\n中间 if (cursorPosition > 0 && cursorPosition < text.length()) { if (text.charAt(cursorPosition - 1) == '\r' && text.charAt(cursorPosition) == '\n') { adjustedCursor = cursorPosition + 1; } } String before = text.substring(0, adjustedCursor); String after = text.substring(adjustedCursor); return before + "_" + after;
内容的提问来源于stack exchange,提问作者Samuel Stone
相关产品推荐
相关产品推荐

