R语言如何按规则每4个字符为字符串插入换行符与连字符
R语言按规则插入换行符实现方案
原有代码问题梳理
- 误用R内置函数名
c作为变量名,会覆盖基础函数导致后续运行报错 - 循环逻辑错误:未按步长4批量处理字符,逐个字符遍历会导致结果错乱
- 语法错误:相等判断需使用
==,原代码中误用赋值符= - 拼接逻辑错误:直接覆盖原字符串变量
d,未保留未处理的剩余字符
实现代码
# 封装为可直接调用的函数,split_len为分段长度,默认4 insert_line_break <- function(input_str, split_len = 4) { # 拆分为单个字符向量方便按位置操作 char_vec <- strsplit(input_str, "")[[1]] total_length <- length(char_vec) result_list <- c() current_start <- 1 while (current_start <= total_length) { # 计算当前分段的结束位置,不足4位时取到最后 current_end <- min(current_start + split_len - 1, total_length) current_segment <- char_vec[current_start:current_end] segment_length <- current_end - current_start + 1 # 剩余字符不足4位,直接拼接后结束循环 if (segment_length < split_len) { result_list <- c(result_list, paste(current_segment, collapse = "")) break } # 按规则判断第4位字符 fourth_char <- current_segment[split_len] if (fourth_char == " ") { # 第4位是空格,直接加换行 result_list <- c(result_list, paste0(paste(current_segment, collapse = ""), "\n")) next_prefix <- "" } else { # 第4位非空格,加换行后下一行开头加连字符 result_list <- c(result_list, paste0(paste(current_segment, collapse = ""), "\n")) next_prefix <- "-" } # 更新下一次的起始位置,插入前缀 current_start <- current_end + 1 if (nchar(next_prefix) > 0 && current_start <= total_length) { char_vec <- c(char_vec[1:current_start-1], next_prefix, char_vec[current_start:total_length]) total_length <- length(char_vec) } } # 合并所有片段为最终字符串 paste(result_list, collapse = "") } # 测试运行 d <- "ABCD CDEFG LM NOPQRSTR" output <- insert_line_break(d) # 打印可视化结果 cat(output)
运行结果
运行cat(output)输出效果如下:
ABCD CDEF -G LM NOPQ -RSTR
如果需要输出带转义符的字符串格式,可调用dput(output),结果为:
"ABCD \n CDEF\n-G LM\n NOPQ\n-RSTR"
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

