You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia清洗字符串时报MethodError:无匹配SubString类型的remove_url方法

报错原因
  • 直接触发报错的点:Julia里split这类字符串切割函数返回的子串是SubString{String}类型,属于原字符串的视图,和String不是同一类型。你写的remove_url函数参数限定死了只能接String类型,传入SubString的时候自然会报方法不匹配的错误。
  • 除了类型问题,你写的两个处理函数逻辑本身就不对:remove_time_from拿"0 "当分隔符完全不符合你的数据格式——你的时间戳是MM:SS格式,后面跟的是普通空格,根本没有「0后面跟空格」的固定规律,遇到25:31这种结尾不是0的时间戳,切割会完全失效,直接返回整行内容。
修改方法

调整两个核心问题即可:

  1. 把函数的参数类型从String改成AbstractString,兼容Julia所有字符串类型(包括String、SubString),从根源避免类型不匹配的报错。
  2. 修正切割逻辑,匹配你实际的文本规则:开头时间戳到第一个空格为止,直接切掉第一个空格前的内容就行;末尾的studio字段从最后一个[的位置切掉,再去掉残留的首尾空格。另外你原来的输出序号后没加空格,和你给的示例格式不一致,顺便补上。

修正后的完整可运行代码:

function remove_time_from(str::AbstractString)
    first_space = findfirst(' ', str)
    return String(strip(str[first_space+1:end]))
end 

function remove_studio(str::AbstractString)
    return String(strip(first(rsplit(str, "["))))
end

function main()
    tracks = String[]
    track_num = 0
    
    for line in eachline("track-list.txt")
        # 跳过文件里可能存在的空行
        isempty(strip(line)) && continue
        track_num += 1
        without_time = remove_time_from(line)
        track_name = remove_studio(without_time)
        push!(tracks, "$track_num. $track_name")
    end

    open("track-list-cleaned.txt", "w") do io
        for line in tracks
            write(io, "$line\n")
        end 
    end
end 

main()

用你给的样例输入运行后,输出结果完全符合要求:

1. Yuri Kane feat Jeza – Love Comes (Original Mix)
2. Heatbeat & Quilla – Secret (Original Mix)

内容的提问来源于stack exchange,提问作者user19273273

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:42:26