728x90
특정 문자 제거
- 양끝 문자 제거
중간에 있는 문자는 제거 불가능
var helloStr = "Hello!"
var iosStr = "#iOS"
var swiftStr = "#Swift!"
helloStr.trimmingCharacters(in: ["!"])//Hello
iosStr.trimmingCharacters(in: ["#"])//iOS
swiftStr.trimmingCharacters(in: ["#","!"])//Swift
- 중간에 있는 문자 제거
var str = "Hello~!@@@, Swift Zedd" str.components(separatedBy: ["~","!","@",",","Swift"])//error!!
var str = "Hello~!@@@, Zedd" str.components(separatedBy: ["~","!","@",","]).joined() //Hello Zedd //separatedBy에는 String이 들어갈 수 없다. character만 들어가야함
- 특정 문자(character) 제거
var str = "Hello~!@@@, Zedd" str.components(separatedBy: ["~","!","@",","]).joined() //Hello Zedd
- 끝에 있는 문자 제거
let a = "123456" a.dropLast(1) // "12345"
- trim 이용하기
trim?
문자열 앞뒤의 공백을 제거한 새로운 문자열을 리턴 해주는 함수. 문자열 중간에 있는 공백은 제거되지 않는다.
//앞뒤 공백이 제거된 AfterTrim 문자열을 구할 수 있습니다.
let beforeTrim = " a b "
let AfterTrim = beforeTrim.trimmingCharacters(in:
.whitespacesAndNewlines) // "a b"
/*공백이 제거된 문자열에 isEmpty 함수를 사용하면, 유저로부터 입력받은 값의
공백체크를 하기 좋습니다.*/
let beforeTrim = " "
let beforeIsEmpty = beforeTrim.isEmpty // false
let beforeLength = NSString(string: beforeTrim).length // 2
let afterTrim = beforeTrim.trimmingCharacters(in:
.whitespacesAndNewlines)
let afterIsEmpty = afterTrim.isEmpty // true
let afterLength = NSString(string: afterTrim).length // 0
//입력받은 문자열에서 괄호 지우기 -> "x,y"
func removeParenthesis(_ input: String) -> String {
var inputs = input
if inputs.contains("(") && inputs.contains(")") {
inputs = inputs.replacingOccurrences(of: "(", with: "")
inputs = inputs.replacingOccurrences(of: ")", with: "")
}
return inputs
}
//입력값에서 숫자만 가져오기
func makeNumericArrayBy(rawInput: String) -> [Int?] {
let pointElements = rawInput.components(separatedBy:CharacterSet
(charactersIn: "-,")).map { $0.trimmingCharacters(in: CharacterSet
(charactersIn: "()")) }
let numericElements = pointElements.map {Int($0)}
return numericElements
}
print(makeNumericArrayBy(rawInput: "(10,10)-(3,3)"))
//[Optional(10), Optional(10), Optional(3), Optional(3)]
- 상단 코드 해석하기
- components(separatedBy: CharacterSet) → [String]
- : characterSet을 이용해 string을 나눠서 문자열 배열을 리턴
- map { $0 } : 배열의 0번째
- trimmingCharacters(in set: CharacterSet) → String
- : charactersIn에 주어진 character를 string에서 제거하여 새로운 string 리턴
let pointElements = rawInput.components(separatedBy:CharacterSet (charactersIn: "-,")).map { $0.trimmingCharacters(in: CharacterSet(charactersIn: "()")) } //["10", "10", "3", "3"]
문자 쪼개기
let str = "1 2 "
let strArr = str.split(separator: " ")
// strArr["1","2"]
let str = "1 2 "
let strArr = str.components(separatedBy: " ")
// strArr["1","2",""]
let str = "123"
for i in str.indices {
print(str[i])
}
// 1
// 2
// 3
문자열에서 숫자만 가져와 배열만들기
let str = “123abc45”
let num = str.components(separatedBy: CharacterSet.decimalDigits.inverted)
// num = [“123”,”45”]
< 참고 사이트 >
https://zeddios.tistory.com/74
https://hcn1519.github.io/articles/2017-07/swift_Str
문자 쪼개서 배열에 넣기
let str = "ab"
let arr = str.map{$0} // ["a","b"]
let str2 = ["ab","cd"]
let arr2 = str2.map{$0.map{$0}} // [["a","b"],["c","d"]]
let str3 = "ab"
let arr3 = Array(str3) // ["a","b"]
Formatter
date를 내가 원하는 형태로 리턴 받을 수 있도록 해준다
- Date -> String
let dateFormatter: DateFormatter = {
let format = DateFormatter()
format.dateStyle = .medium // 날짜를 보여줄 스타일
format.timeStyle = .medium // 시간을 보여줄 스타일
// 또는 커스텀 형식 >>
format.dateFormat = "yyyy/MM/dd hh:mm"
}
- String -> Date String 날짜와 변환할 때 포맷이 똑같아야 한다.
let dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyy/MM/dd hh:mm"
dateFormat.timeZone = NSTimeZone(name:"UTC") as TimeZone?
let date = dateFormat.date(from: stringDate)!
Pattern | Result (in a particular locale) |
---|---|
yyyy.MM.dd G 'at' HH:mm:ss zzz | 1996.07.10 AD at 15:08:56 PDT |
EEE, MMM d, ''yy | Wed, July 10, '96 |
h:mm a | 12:08 PM |
hh 'o''clock' a, zzzz | 12 o'clock PM, Pacific Daylight Time |
K:mm a, z | 0:00 PM, PST |
yyyyy.MMMM.dd GGG hh:mm aaa | 01996.July.10 AD 12:08 PM |
- 숫자"%02d" : 0 - 앞에 0을 붙여준다 / 2 - 2개의 문자 / d - decimal 숫자로
String(format:"%02d",문자로 바꿀 변수명)
- 문자인 숫자의 셋째자리 콤마
func decimalNumber(value: Int) -> String{ let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal guard let result = numberFormatter.string(from: NSNumber(value: value)) else { return "" } return result }
특정 위치의 문자 찾기
let str = "KRW(₩원화)"
let range1 = str.index(str.startIndex, offsetBy: 0) ... str.index(str.startIndex, offsetBy: 2)
let range2 = String(str.prefix(3))
// range1: KRW
// range2: KRW
index(_:offsetBy) -> String
Prefix(_:) -> ArraySlice
특정 문자의 위치 찾기
let str = "hello"
var idx = 0
if let range = str.range(of:"e") {
idx = str.distance(from: str.startIndex, to: range.lowerBound) // idx = 1
}
range = str에서 "e"를 찾기 위한 시작값부터 끝값까지의 값
.lowerBound = range의 시작값
++ str.range(of:"e", options: .backwards)라고 옵션을 넣어주면 뒤에서 부터 검색
(1...10).lowerBound // 1 시작값
(1...10).upperBound // 10 끝값
(1...10).count // 10
(1...10).isEmpty // false
문자 잘라내기
특정 위치에서부터 끝까지 자르기
let str = "abcdefg"
// 첫번째 방법
let idx = str.index(str.startIndex, offsetBy: 3)
let result = String(str[idx...]) // defg
// 두번째 방법
let findIdx:String.Index = str.firstIndex(of: "d")!
let result = str[findIdx...] // defg
처음부터 특정 위치까지 자르기
let str = "abcdefg"
let idx = str.index(str.startIndex, offsetBy: 3)
let result = String(str[...idx]) //abcd
앞에서 몇 개, 뒤에서 몇 개만 자르기
let str = "abcdefg"
let pre = str.prefix(3) // 앞에서 3개
//abc
let suf = str.suffix(3) // 뒤에서 3개
// efg
첫번째 문자만 가져오기
let string = "hello"
let first = string.removeFirst() // h
문자열 뒤집기
let str = "hello"
let reversed = String(str.reversed())
// olleh
특정 문자의 위치 부터 끝까지
let index = script.firstIndex(of: "\n") ?? script.startIndex
let text = (script[index...]).replacingOccurrences(of: "\n", with: "")
let range = (script as NSString).range(of: String(text))
특정 위치부터 끝까지
let str = "Programmer1234"
let suffixString = str.suffix(11)
// grammer1234
문자열 for문 돌리기
extension String {
subscript(index: Int) -> Character {
return self[String.Index(utf16Offset: index, in: self)]
}
}
출처 : https://jeong9216.tistory.com/556
ASCII
- Unicode -> Int(UInt32)
let value = "abcDEF" for index in value.utf16 { print(index) // 97,98,99 ~ } var char = "A" UnicodeScalar(char)?.value // 65
- Int(UInt32) to Unicode
let num = 97
if let num = UnicodeScalar(num) {
print(num) // a
}
- UInt32 to Int
let ascii = UnicodeScalar(char)?.value
let number = Int(truncating: ascii as! NSNumber)
- ascii 와 string 조합하여 사용하기
var ascii = Int(UnicodeScalar("a")!.value)
var str = String(UnicodeScalar(ascii)!)
참고 :
https://shaeod.tistory.com/228
https://zeddios.tistory.com/340
NSMutableAttributedString
String에 문자 외 다른 타입을 삽입 할 수 있도록 해주는 클래스 ex. 문자에 이미지 삽입
let attributedString = NSMutableAttributedString(string: "")
let attachment = NSTextAttachment()
let image = UIImage(named: "image.jpg")
attachment.image = image
attachment.bounds = CGRect(x:0, y:0, width:100, height:100) // 이미지의 위치와 사이즈 지정
attributedString.append(NSAttributedString(attachment: attachment))
textField.attributedText = attributedString
728x90
'iOS > swift' 카테고리의 다른 글
숫자 다루기 (0) | 2023.11.07 |
---|---|
attributedString (0) | 2022.12.26 |
Array (0) | 2022.12.21 |
진법 변환 (0) | 2022.08.31 |
Alamofire timeout set(Swift5) (0) | 2022.08.25 |
댓글