在Swift 3中的文本中放置一个字符串之前的字符串

时间:2016-10-08 10:56:08

标签: ios swift swift3

我在这里处理一个问题,我有一个像这样的图像的网址

$('.form-control[name=team1]').on('change', function(e){ var thisVal = $(this).val(); $('.form-control[name=team2] option').each(function(){ if(thisVal == $(this).attr('value')){ $(this).attr('disabled', 'disabled'); }else{ $(this).removeAttr('disabled'); } }) })

这是一个字符串。

我想在http://example.com/image/test.jpg之前插入.jpg

等特定文字

有没有办法分析URL字符串并以某种方式添加此文本,因此最终字符串应为

-40x40

我到目前为止所尝试的是

http://example.com/image/text-40x40.jpg

但我得到2个错误。

1)我不能添加超过1个字符和2)我不能做数学广告endIndex。

但我不能在那里添加多个角色。

非常感谢!

6 个答案:

答案 0 :(得分:4)

试试这个。它使用NSURL,它存在,以便路径操作简单合法! documentation非常好。

let s1 = "http://example.com/image/test.jpg"
let u = URL(fileURLWithPath: s1)
let exExt = u.deletingPathExtension()
let s2 = exExt.absoluteString + "-40x40.jpg"

答案 1 :(得分:3)

另一种方式。

问题中显示的代码已修复:

var finalImage = "http://example.com/image/test.jpg"
let extIndex = finalImage.index(finalImage.endIndex, offsetBy: -4)
finalImage.insert(contentsOf: "-40x40".characters, at: extIndex)

使用NSRegularExpression

let origImage = "http://example.com/image/test.jpg"
let regex = try! NSRegularExpression(pattern: "(\\.jpg)$", options: .caseInsensitive)
let finalImage = regex.stringByReplacingMatches(in: origImage, range: NSRange(0..<origImage.utf16.count), withTemplate: "-40x40$0")

答案 2 :(得分:2)

Grimxn的解决方案可能最适合此问题,但对于更复杂的URL操作,请查看NSURLComponents类。您可以将NSURL转换为NSURLComponents,然后使用NSURLComponents的各种方法操纵您的网址,最后将NSURLComponents转换回NSURL

如@dfri的评论中所述,Swift 3(及更高版本)包含一个本地URLComponents类,它遵循Swift命名和调用约定。展望未来你应该使用它而不是Objective-C / Swift 2 NSURLComponents类。

答案 3 :(得分:2)

作为整齐accepted answer by @Grimxn的补充:Foundation's URL有更多方法可以让你更多地分离“关注点”,以防你想要对图像进行更复杂的修改(文件) )名称,而不是真正担心图像(文件)名称扩展名。

let s1 = "http://example.com/something.cgi/image/test.jpg"
let u = URL(fileURLWithPath: s1)

// separate into (String) components of interest
let prefixUrl = u.deletingLastPathComponent().absoluteString 
    // "http://example.com/something.cgi/image/"
let fileName = u.deletingPathExtension().lastPathComponent   
    // "test"
let fileExtension = "." + u.pathExtension                    
    // ".jpg"

// ... some methods that implements your possibly more 
// complex filename modification
func modify(fileName fName: String) -> String {
    // ...
    return fName + "-40x40"
}

// reconstruct url with modified filename
let s2 = prefixUrl + modify(fileName: fileName) + fileExtension
print(s2) // http:/example.com/something.cgi/image/test-40x40.jpg

答案 4 :(得分:1)

if let url = NSURL(string: "http://example.com/image/test.jpg"),withoutExt = url.URLByDeletingPathExtension
{
       let finalstring : NSString = withoutExt.absoluteString + "-40x40.jpg"
       print(finalstring)
}

答案 5 :(得分:1)

非常简单的一行...

$ cat tst.awk
BEGIN { FS=OFS="," }
function cvt(dt) { return gensub(/(....)(..)(..)/,"\\2/\\3/\\1",1,dt) }
{ $4=cvt($4); $5=cvt($5); print }

$ awk -f tst.awk file
1231,aaa,bbb,10/01/2016,10/02/2016,hi-ax
1231,aaa,ccc,10/02/2016,10/03/2016,hi-ay
1231,aaa,ddd,10/01/2016,10/07/2016,hi-az