【问题标题】:read text from scroll Textview and insert specific string in macOS从滚动 Textview 读取文本并在 macOS 中插入特定字符串
【发布时间】:2020-08-27 14:32:11
【问题描述】:

您好,我想根据 MacOS 中的用户输入创建一个字符串,快。

例如,如果用户输入了一个字符串

" 1号线fadsjkf

第 2 行 fasdjkfla

第 3 行 fasdnfkdf

"

我想读取每一行中的字符串并插入一些字符或字符串,例如

" XYZ 1 号线 fadsjkf

ABC 2 号线 fasdjkfla

DEF 第 3 行 fasdnfkdf

"

如何实现这个功能?

【问题讨论】:

    标签: swift xcode macos cocoa


    【解决方案1】:

    在您的示例中,用户输入是 3 行吗?如果是这样,您可以将字符串拆分为一个数组,在每个项目的开头添加文本并重新组合一个字符串。

    应该是这样的:

    let someText = """
    Line 1 fadsjkf
    Line 2 fasdjkfla
    Line 3 fasdnfkdf
    """
    // May be your text comes as let someText = "Line 1 fadsjkf\nLine 2 fasdjkfla\nLine 3 fasdnfkdf"
    
    let toBeAppended = ["XYZ", "ABC", "DEF"] // Do you want to compute automatically ?
    var lines = someText.split(separator: "\n").map { String($0) }
    var newLines = ""
    
    for (iLine, line) in lines.enumerated() {
        let newLine = toBeAppended[iLine] + " " + line
        newLines = newLines + newLine + "\n"
    }
    print(newLines)
    

    然后得到:

    XYZ Line 1 fadsjkf
    ABC Line 2 fasdjkfla
    DEF Line 3 fasdnfkdf
    

    已编辑

    如果您想要超过 3 行且未确定行数:

    let someText = "Line 1 fadsjkf\nLine 2 fasdjkfla\nLine 3 fasdnfkdf\nLine 4 fasdjkflaa\nLine 5 fasdjkflab\nLine 6 fasdjkflac\nLine 7 fasdjkflad\nLine 8 fasdjkflae\nLine 9 fasdjkflaf\nLine 10 fasdjkflag\nLine 11 fasdjkflah\nLine 12 fasdjkflai"
    let toBeAppended = ["XYZ", "ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VWX", "YZ@"] // 9 here, up to you to add more ; beyond this, add for instance @@@
    var lines = someText.split(separator: "\n").map { String($0) }
    var newLines = ""
    
    for (iLine, line) in lines.enumerated() {
        let newLine = iLine < toBeAppended.count ? toBeAppended[iLine] + " " + line : "@@@ " + line
        newLines = newLines + newLine + "\n"
    }
    print(newLines)
    

    你得到:

    XYZ Line 1 fadsjkf
    ABC Line 2 fasdjkfla
    DEF Line 3 fasdnfkdf
    GHI Line 4 fasdjkflaa
    JKL Line 5 fasdjkflab
    MNO Line 6 fasdjkflac
    PQR Line 7 fasdjkflad
    STU Line 8 fasdjkflae
    VWX Line 9 fasdjkflaf
    YZ@ Line 10 fasdjkflag
    @@@ Line 11 fasdjkflah
    @@@ Line 12 fasdjkflai
    

    【讨论】:

    • 嗨,它有效。但是,我需要稍微复杂一点,实际上,我不知道用户会输入 3 行还是 5 行。你能解决这个问题吗?
    • 这个问题是:你如何定义要在开头添加的单词?
    • 我想我明白了。开头要加的词只取决于行号,但是可以根据[变量行]写一个函数。谢谢!
    • 我知道 "var lines = someText.split(separator: "\n").map { String($0) }" 用于分割多行文本,但你能解释一下什么是 " .map { String($0) }" 用于?
    • map 是因为 split 返回子字符串而不是字符串。因此,为了进一步使用,map 将子字符串类型转换为字符串,以防类型很重要。但在这种情况下,不需要它,无论如何追加都会起作用。
    猜你喜欢
    • 2011-03-14
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2012-03-30
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多