如何在文本视图中的某个索引处获取字符的行号和列号?
How do I get the line and column number of a character at some index in Text View?
我有一个 NSTextView
,里面有很多文字。
如何获取某个索引处字符的行号和列号?
比方说,我在 NSTextView
:
中有这段文字
"This is just a\ndummy text\nto show you\nwhat I mean."
我需要第 16 个字符的行号和列号。在这种情况下:
Line: 2
Column: 2
如何使用 Swift 来 calculate/get?
另一个例子:
"This is just a\ndummy text\nto show you\nwhat I mean."
我想要 15th(或 16th,如果 \n
也被计算)字符的行号,像这样:
Line: 2
Column: 1
您只需要使用 String 方法 componentsSeparatedByString 拆分文本行,然后您只需要按照以下方式计算行数、列数和字符位置:
extension String {
func characterRowAndLineAt(position: Int) -> (character: String, line: Int, column:Int)? {
var lineNumber = 0
var characterPosition = 0
for line in components(separatedBy: .newlines) {
lineNumber += 1
var columnNumber = 0
for column in line {
characterPosition += 1
columnNumber += 1
if characterPosition == position {
return (String(column), lineNumber, columnNumber )
}
}
characterPosition += 1
if characterPosition == position {
return ("\n", lineNumber, columnNumber+1 )
}
}
return nil
}
}
let myText = "This is just a\ndummy text\nto show you\nwhat I mean."
let result = myText.characterRowAndLineAt(position: 16) // "(.0 "d", .1 2, .2 1)"
let character = result?.character // "d"
let line = result?.line // 2
let column = result?.column // 1
我有一个 NSTextView
,里面有很多文字。
如何获取某个索引处字符的行号和列号?
比方说,我在 NSTextView
:
"This is just a\ndummy text\nto show you\nwhat I mean."
我需要第 16 个字符的行号和列号。在这种情况下:
Line: 2
Column: 2
如何使用 Swift 来 calculate/get?
另一个例子:
"This is just a\ndummy text\nto show you\nwhat I mean."
我想要 15th(或 16th,如果 \n
也被计算)字符的行号,像这样:
Line: 2
Column: 1
您只需要使用 String 方法 componentsSeparatedByString 拆分文本行,然后您只需要按照以下方式计算行数、列数和字符位置:
extension String {
func characterRowAndLineAt(position: Int) -> (character: String, line: Int, column:Int)? {
var lineNumber = 0
var characterPosition = 0
for line in components(separatedBy: .newlines) {
lineNumber += 1
var columnNumber = 0
for column in line {
characterPosition += 1
columnNumber += 1
if characterPosition == position {
return (String(column), lineNumber, columnNumber )
}
}
characterPosition += 1
if characterPosition == position {
return ("\n", lineNumber, columnNumber+1 )
}
}
return nil
}
}
let myText = "This is just a\ndummy text\nto show you\nwhat I mean."
let result = myText.characterRowAndLineAt(position: 16) // "(.0 "d", .1 2, .2 1)"
let character = result?.character // "d"
let line = result?.line // 2
let column = result?.column // 1