Pangu
Pangu

Reputation: 3819

How to get a substring from a specific character to the end of the string in swift 4?

I currently have a string containing a path to an image file like so:

/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg

I'm trying to retrieve the full name of my image file like so: 2017-07-07_21:14:52_0.jpeg

How would I get the substring starting after the last / to the end of the file path?

I've seen questions related to using substrings:

  1. Swift: How to get substring from start to last index of character
  2. How does String substring work in Swift 3
  3. Substring from String in Swift

However, the provided answers did not help me with my specific problem.

I'm sure it may be something very simple, but all I keep getting is the wrong range of substrings.

Thanks!

Upvotes: 2

Views: 1316

Answers (2)

Martin R
Martin R

Reputation: 540105

To answer your direct question: You can search for the last occurrence of a string and get the substring from that position:

let path = "/Users/user/.../AppName/2017-07-07_21:14:52_0.jpeg"
if let r = path.range(of: "/", options: .backwards) {
    let imageName = String(path[r.upperBound...])
    print(imageName)  // 2017-07-07_21:14:52_0.jpeg
}

(Code updated for Swift 4 and later.)

But what you really want is the "last path component" of a file path. URL has the appropriate method for that purpose:

let path = "/Users/user/.../AppName/2017-07-07_21:14:52_0.jpeg"
let imageName = URL(fileURLWithPath: path).lastPathComponent
print(imageName) // 2017-07-07_21:14:52_0.jpeg

Upvotes: 5

Sid Mhatre
Sid Mhatre

Reputation: 3417

Try this :

1)

var str = "/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg"
let array = str.components(separatedBy: "/")

print(array[array.count-1])    //2017-07-07_21:14:52_0.jpeg

2)

let str = "/Users/user/Library/Developer/CoreSimulator/Devices/Hidden/data/Containers/Data/Application/Hidden/Documents/AppName/2017-07-07_21:14:52_0.jpeg"

var fileName = URL(fileURLWithPath: str).lastPathComponent

print(fileName) //2017-07-07_21:14:52_0.jpeg

let fileName = URL(fileURLWithPath: path).deletingPathExtension().lastPathComponent
print(fileName) //2017-07-07_21:14:52_0

Upvotes: 1

Related Questions