请有人帮助我。
我正在尝试将新行(\ n)添加到现有字符串中。
让我们说这个字符串是20多个字符长,我想找一个空格" "在15到20的范围之间然后插入一个新的行(\ n)就在索引之后的char" " (空格)
我希望这是有道理的:F
到目前为止我的代码如下
var newString = string
newString[newString.startIndex..< newString.startIndex.advancedBy(16)]
/* let startIndex = newString.startIndex.advancedBy(16)
let endIndex = newString.endIndex
let newRange = startIndex ..< endIndex
print("start index = \(newRange)")*/
let range: Range<String.Index> = newString.rangeOfString(" ")!
let index: Int = newString.startIndex.distanceTo(range.startIndex)
newString.insert("\n", atIndex: newString.startIndex.advancedBy(index))
label.text = newString
如果我尝试以下
let newIndex = name.startIndex.advancedBy(19).distanceTo(range.endIndex)
我收到错误消息
致命错误:无法递增endIndex
我感觉我在正确的轨道上,但上面会在索引处插入一个新行,其中空格首先出现在字符串中,而不是在例如索引之间。 15和20
感谢您的提前帮助
托马斯
答案 0 :(得分:1)
以下内容查找范围15..<END_OF_YOUR_STRING
中的第一个空格,并将其替换为新行(\n
)。在您提出的问题中,您声明明确要在范围15...20
中查找空格,并在空格后插入新行。下面我假设你真的想要:
15
开始的第一个空格,但一直持续到找到一个(否则:如果在范围15...20
内找不到空格,则不应插入换行符?)。< / LI>
醇>
这些与您的问题的偏差都可以很容易地恢复,所以请告诉我,如果您希望我按照您的指示专门指出(而不是包括我自己的理由),并且我&#39;我会更新这个答案。
解决方案如下:
var foo = "This is my somewhat long test string"
let bar = 15 /* find first space " " starting from index 'bar' */
if let replaceAtIndex = foo[foo.startIndex.advancedBy(bar)..<foo.endIndex]
.rangeOfString(" ")?.startIndex.advancedBy(bar) {
foo = foo.stringByReplacingCharactersInRange(
replaceAtIndex...replaceAtIndex, withString: "\n")
}
print(foo)
/* This is my somewhat
long test string */
请注意,在范围15到20 中找到空格与 15:th到20:字符之间存在一个一个一个的区别(后者在14...19
范围内。在上面,我们搜索从第16个字符开始的第一个空格(索引15
)。
答案 1 :(得分:0)
感谢dfri指出我正确的方向。虽然他的答案对我的问题是正确的,但我提供了以下代码来帮助
if string.characters.count >= 20
{
let bar = 15 // where to split the code to begin looking for the character
let beginString = string.substringWithRange(name.startIndex..<name.startIndex.advancedBy(bar))
var endString = string[string.startIndex.advancedBy(bar)..<name.endIndex]
if endString.containsString(" ")
{
let range = endString.rangeOfString(" ")
if let i = range
{
endString.insert("\n", atIndex:i.startIndex.advancedBy(1) )
let newString = "\(beginString)\(endString)"
label.text = newString
}
}
}