【问题标题】:Swift: insertContentsOf斯威夫特:插入内容
【发布时间】:2016-01-22 09:06:00
【问题描述】:

我正在尝试使用 inertContentsOf 循环查找所有“\”字符并在其前面插入另一个“\”字符。问题是如果我需要插入的字符,我并不总是知道索引。

例如,我知道我想在索引 3 处插入“\”:

myString.insertContentsOf("\\".characters, at: myString.startIndex.advancedBy(3))

在不知道索引的情况下如何执行此操作? 我已经尝试了以下 for 循环,但没有任何运气。

for words in inputArray {
    for char in words {
        if char == "\\" {
            words.insertContentsOf("\\".characters, at: char)
        }
    }
}

at: char 对我大喊大叫,因为我试图将字符转换为索引,我得到了但不知道如何修复它。

编辑:由于某种原因,当我尝试将其放入函数 inputArray.map 时不会被调用。

func GenerateString(inputArray:[String])->String {

inputArray.map {
    $0.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")
}

let joiner = "|"
let joinerString = inputArray.joinWithSeparator(joiner)

return ("Result: \(joinerString)")
}

let example = ["hello", "world", "c:\Program File\Example"]
GenerateString(example)

结果:

"Hello|world|c:\Program File\Example"

【问题讨论】:

  • 你的输入字符串是什么?你想要什么输出?
  • 输入:“hello”、“world”、“c\Program Files\Example”。输出:“hello world c\\Program Files\\Example”。
  • 我看到你用map 编辑你的问题,小心map 返回一个新数组,不要更改当前数组如果你不保留返回数组,编译器可以删除这个无用的代码

标签: string swift replace


【解决方案1】:

改用stringByReplacingOccurrencesOfString

words.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")

【讨论】:

  • 太棒了,这行得通。我花了一段时间才让它在终端中运行。您需要先导入 Foundation,然后才能使用 stringByReplacingOccurrencesOfString。
  • @Wrenzoe 啊,是的,对不起那个:/我总是忘记进口。
【解决方案2】:

试试stringByReplacingOccurrencesOfString

var words: String = "c\\Program Files\\Example"
words = words.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")
print("Result: \(words)")
// "Result: c\\Program Files\\Example"

或者如果你想在数组中这样做:

let inputArray: [String] = ["hello", "world", "c\\Program Files\\Example"]
inputArray.map {
    $0.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")
}
print("Result: \(inputArray)")
// "Result: ["hello", "world", "c\\Program Files\\Example"]"

stringByReplacingOccurrencesOfString("\\", withString: "\\\\") 行意味着将\\ 替换为\\\\,这正是您想要做的。 :)

相关问题:Any way to replace characters on Swift String?

【讨论】:

  • 小心转义字符,这可能很棘手:您的答案是正确的,但您显示的打印结果是错误的。您的代码提供了转义的反斜杠,这没问题,但是您显示双重转义(就像它出现在 Playground 窗格中一样)而不是简单转义(就像它出现在 print 中一样)。此外,我们必须对 SO 上的转义字符进行转义,以使其出现在文本或 cmets 中。确实很棘手。 ;)
  • @EricD。这真的很棘手:| (我从操场上复制结果)
  • 将结果评论更新为来自真实print()的结果
  • no 带有 map 的代码是错误的,您编辑您的答案并复制我的回复(或从我的回复中复制的有问题的代码)而不知道如何使用 map...,map 返回一个新数组(这里有相同的类型,所以我们可以做inputArray = inputArrat.map {..}
  • @phimage 但是当我在实际项目中尝试时,这段代码确实返回了正确的结果:(
【解决方案3】:

您可以在任何属于 SequenceType 的序列上调用 enumerate() 以获取索引以及当前项,这样您就可以执行以下操作: for (index, char) in words.enumerate() 尽管您还应该避免在循环时修改数组。考虑使用另一个数组来添加普通字符,对于\,添加\\

【讨论】:

    【解决方案4】:

    您可以在您的阵列上进行映射并使用stringByReplacingOccurrencesOfString

    let new Array = inputArray.map { 
        $0.stringByReplacingOccurrencesOfString("\\", withString: "\\\\")
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2017-11-13
      • 2015-08-19
      • 2014-09-11
      • 1970-01-01
      相关资源
      最近更新 更多