Как получить конкретную строку после и до конкретного символа в Swift? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть эта строка: "lat/lng: (-6.2222391,106.7035684)"

Мне нужно только получить эти двойные типы данных в этом string.так как получить только * -6.222239 * 1 и 106.7035684 как строковую переменную?

Как получить число в скобках?

Так что я думаю, что получаюстрока после "(" и до "," для получения "-6.2222391", а также после "," и до ")" для получения "106.7035684"

, но я не знаю, как получить это в коде

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018

Попробуйте это:

let source = "lat/lng: (-6.2222391,106.7035684)".components(separatedBy: ")")[0]
let removed = source.components(separatedBy: "(")[1];// removing

//OR
//let source = "lat/lng: (-6.2222391,106.7035684)".components(separatedBy: "(")[1]
//let removed = source.components(separatedBy: ")")[0];// removing


let coord = removed.components(separatedBy: ",") // removing

let lat = Double(coord[0])
let lng = Double(coord[1])
0 голосов
/ 26 декабря 2018
let source = "lat/lng: (-6.2222391,106.7035684)"
let splited = source.components(separatedBy: "lat/lng: ")[1] //separating

let removed = splited.replacingOccurrences(of: "(", with: "").replacingOccurrences(of: ")", with: "") // removing

let coord = removed.components(separatedBy: ",") // removing

let lat = Double(coord[0])
let lng = Double(coord[1])
0 голосов
/ 26 декабря 2018

Вы уже получили несколько хороших ответов.Но я думаю, что я придумал более компактную версию.

Вам нужно заботиться о - 0~9 . и ,

, будетрассматривается только как наличие двух компонентов, а затем используется для их разделения.

См. это:

let source = "lat/lng: (-6.2222391,106.7035684)"
let allowedCharactersString = "-01234567890.,"
let latLongValues = String(source.characters.filter { 
                            allowedCharactersString.characters.contains($0) 
                          }).components(separatedBy: ",")
print(latLongValues.first!) // "-6.2222391"
print(latLongValues.last!) // "106.7035684"
0 голосов
/ 26 декабря 2018

Вы можете использовать регулярное выражение:

let str = "lat/lng: (-6.2222391,106.7035684)"
let rg = NSRange(location: 0, length: (str as NSString).length)

let latRegex = try! NSRegularExpression(pattern: "(?<=\\()[+-\\.0-9]+(?=,)")
  • (?<=\\() равно положительный взгляд позади , он ищет все, что предшествует (,
  • [+-\\.0-9]+ нетерпеливо ищет по крайней мере один или несколько символов, которые являются +, -, . или цифрой от 0 до 9,
  • (?=,) является положительный взгляд , соответствует чему-либо, за которым следует ,.

Теперь давайте воспользуемся этим регулярным выражением:

let latitude: Double?  = latRegex.matches(in: str, range: rg)
    .compactMap { Double(str[Range($0.range, in: str)!]) }
    .first

if let lat = latitude {
    print(lat)  //-6.2222391
}

Таким же образом, мы можем получитьдолгота:

let longRegex = try! NSRegularExpression(pattern: "(?<=,)[+-\\.0-9]+(?=\\))")
let longitude: Double?  = longRegex.matches(in: str, range: rg)
    .compactMap { Double(str[Range($0.range, in: str)!]) }
    .first

if let long = longitude {
    print(long)  //106.7035684
}

PS: для краткости я использовал принудительное развертывание здесь и там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...