Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 用另一个字符串替换一个字符串_Swift_String - Fatal编程技术网

Swift 用另一个字符串替换一个字符串

Swift 用另一个字符串替换一个字符串,swift,string,Swift,String,我想用“an”来代替句子中的“a”;e、 g.“他包里有一个鸡蛋”,所以在“鸡蛋”之前应该有“一” 我试过这个: let newString = "He has a egg in his bag".replacingOccurrences(of: "a", with: "an") print(newString) –但我得到的是“he hans an egg in the bang”,而不是“he has Ang egg in the bag”。用字母“a”加上一些额外的空格 将代码更改为 i

我想用“an”来代替句子中的“a”;e、 g.“他包里有一个鸡蛋”,所以在“鸡蛋”之前应该有“一”

我试过这个:

let newString = "He has a egg in his bag".replacingOccurrences(of: "a", with: "an")
print(newString)

–但我得到的是“he hans an egg in the bang”,而不是“he has Ang egg in the bag”。

用字母“a”加上一些额外的空格

将代码更改为

if self.addedText.count > 0{ 
   let newString = self.addedText.replacingOccurrences(of: " a ", with: " an ")
   print(newString)
}

我知道这个规则比在元音之前加上一个
n
要复杂得多(即使是这样),但这是一个正则表达式的解决方案

它将一个
n
添加到以元音开头的单词之前的单个
a
$1
表示捕获的元音

let string = "He has a egg in a bag"
let newString = string.replacingOccurrences(of: "\\ba\\s([aeiou])", with: "an $1", options: .regularExpression)

我使用regex和replace在以a、e、I、o、u开头的单词之前捕获
a

if self.addedText.count {
  let newString = string.replacingOccurrences(of: "(\\b)a(\\s)([aeiou])", with: "$1an$2$3", options: .regularExpression)
  print(newString)
}

如果句子是“他有一个鸡蛋在一个袋子里”,它会用一个到处都是的字符串来代替a。如果你想改变具体的位置,你可以通过索引来接近它。这就像“他在爆炸中的鸡蛋”一样,你可以使用“单词边界”
\b
而不是第一个
\s
,因此它在句子的开头起作用。@MartinR这会导致句子以空格字符开头,因此您必须添加其他括号以捕获更多字符并更改替换项(如Thanh的答案)。不会捕获单词边界。我的意思是类似于(“\\ba\\s([aeiou])的重复发生,加上“$1”,…)。我目前无法测试它。如果句子像“一个桔子在他的包里”,这将不会用“an”替换“a”,因此您必须使用正则表达式来解决此类问题,因为下面给出了答案。谢谢