Swift-문자열에서 "문자 제거


84

"Optional ("5 ")"문자열이 있습니다. 5. 주변의 ""를 제거해야합니다. 다음을 수행하여 '옵션'을 제거했습니다.

text2 = text2.stringByReplacingOccurrencesOfString("Optional(", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

코드에서 문자열의 끝을 지정하기 때문에 "문자를 제거하는 데 어려움이 있습니다.


22
문자열이 실제로 문자로 구성되어 있는 경우 선택적인 문자열에 대한 설명Optional("5") 이기 때문에 이전에 문제가 발생한 것일 수 있습니다. "Optional (..)"을 텍스트로 제거하는 대신에 할당하기 전에 선택 사항을 래핑 해제하는 것이 더 합리적 입니다. text2
Martin R

답변:


170

Swift는 백 슬래시를 사용하여 큰 따옴표를 이스케이프합니다. 다음은 Swift에서 이스케이프 된 특수 문자 목록입니다.

  • \0 (널 문자)
  • \\ (백 슬래시)
  • \t (가로 탭)
  • \n (줄 바꿈)
  • \r (캐리지 리턴)
  • \" (큰 따옴표)
  • \' (작은 따옴표)

이것은 작동합니다.

text2 = text2.replacingOccurrences(of: "\\", with: "", options: NSString.CompareOptions.literal, range: nil)

1
불행히도 Swift 1.2에서는 32 비트 장치에서는 작동하지 않는 것 같습니다.
PassKit 2015

1
@GerardGrundy 의견을 보내 주셔서 감사합니다! 최신 버전의 Swift와 호환되도록 답변을 업데이트했습니다.
Sergey Kalinichenko

@Sergey Kalinichenko 안녕하세요, 한 문자열에 대해 여러 문자 집합을 제거하려면 어떻게해야합니까? 예를 들어 문자열에 포함 된 내용에 따라 ".mp3"또는 ".m4a"를 삭제하고 싶습니다. 내가 어떻게 해?
VyacheslavBakinkskiy

59

Swift 3 및 Swift 4 :

text2 = text2.textureName.replacingOccurrences(of: "\"", with: "", options: NSString.CompareOptions.literal, range:nil)

Swift 3.0.1로 업데이트 된 최신 문서는 다음과 같습니다.

  • 널 문자 ( \0)
  • 백 슬래시 ( \\)
  • 가로 탭 ( \t)
  • 줄 바꿈 ( \n)
  • 캐리지 리턴 ( \r)
  • 큰 따옴표 ( \")
  • 작은 따옴표 ( \')
  • 유니 코드 스칼라 ( \u{n}), 여기서 n은 1-8 개의 16 진수입니다.

더 자세한 정보가 필요하면 여기 에서 공식 문서를 볼 수 있습니다.


28

다음은 신속한 3 업데이트 답변입니다.

var editedText = myLabel.text?.replacingOccurrences(of: "\"", with: "")
Null Character (\0)
Backslash (\\)
Horizontal Tab (\t)
Line Feed (\n)
Carriage Return (\r)
Double Quote (\")
Single Quote (\')
Unicode scalar (\u{n})

이것은 훨씬 더 깨끗한 방법입니다.
Super_Simon

9

옵션을 제거하려면이 작업 만 수행해야합니다.

println("\(text2!)")

"!"를 사용하지 않으면 text2의 선택적 값을받습니다.

그리고 5에서 ""를 제거하려면 NSInteger 또는 NSNumber로 쉽게 변환해야합니다. ""가 있으면 문자열이됩니다.


1
먼저 nil이 아닌지 확인해야합니다. 그렇지 않으면 예외가 발생합니다.
CW0007007

6

나는 결국 이것을 놀이터에서 작동시켜 문자열에서 제거하려고하는 여러 문자를 가지고 있습니다.

var otherstring = "lat\" : 40.7127837,\n"
var new = otherstring.stringByTrimmingCharactersInSet(NSCharacterSet.init(charactersInString: "la t, \n \" ':"))
count(new) //result = 10
println(new) 
//yielding what I'm after just the numeric portion 40.7127837

1
여기에 질문이 무엇인지 명확히 해주시겠습니까?
milez

5

문자열에서 "a", "A", "b", "B", "c", "C"와 같은 더 많은 문자를 제거하려면 다음과 같이 할 수 있습니다.

someString = someString.replacingOccurrences(of: "[abc]", with: "", options: [.regularExpression, .caseInsensitive])

4

Martin R이 말했듯이 "Optional ("5 ")"문자열은 뭔가 잘못한 것처럼 보입니다.

dasblinkenlight가 대답하므로 괜찮습니다. 그러나 향후 독자를 위해 대체 코드를 다음과 같이 추가하려고합니다.

if let realString = yourOriginalString {
    text2 = realString
} else {
    text2 = ""
}

예제의 text2는 String처럼 보이며 이미 ""로 설정되어있을 수 있지만 캐스트 또는 올바르게 사용되지 않은 어딘가에 Optional (String) 유형의 yourOriginalString이있는 것 같습니다.

이것이 일부 독자에게 도움이되기를 바랍니다.


1
nil-coalescing 연산자를 사용하면 좀 더 단순화 할 수 있습니다 let resultingString = optionalString ?? "".
Kilian

4

제거를위한 교체는 그다지 논리적이지 않습니다. String.filter를 사용하면 문자열 문자를 문자 단위로 반복하고 진정한 어설 션 만 유지할 수 있습니다.

Swift 4 및 5

var aString = "Optional(\"5\")"

aString = aString.filter { $0 != "\"" }

> Optional(5)

또는 연장하려면

var aString = "Optional(\"5\")"

let filteredChars = "\"\n\t"

aString = aString.filter { filteredChars.range(of: String($0)) == nil }

> Optional(5)

죄송합니다 Luc, 두 번째 예제는 오류 메시지를 제공합니다. 인수 유형 'String.Element'(일명 'Character')가 예상 유형 'StringProtocol'과 일치하지 않습니다 .. 뭔가 놓친 것 같습니까?
user3069232 dec.

2

문자열이 있다고 가정 해 보겠습니다.

var string = "potatoes + carrots"

그 문자열에서 "감자"라는 단어를 "토마토"로 바꾸고 싶습니다.

string = string.replacingOccurrences(of: "potatoes", with: "tomatoes", options: NSString.CompareOptions.literal, range: nil)

문자열을 인쇄하면 이제 다음과 같습니다. "tomatoes + carrots"

찌르기에서 감자라는 단어를 모두 제거하려면 다음을 사용할 수 있습니다.

string = string.replacingOccurrences(of: "potatoes", with: "", options: NSString.CompareOptions.literal, range: nil)

스팅에 다른 문자를 사용하려면 다음을 사용하십시오.

  • 널 문자 (\ 0)
  • 백 슬래시 (\)
  • 가로 탭 (\ t)
  • 줄 바꿈 (\ n)
  • 캐리지 리턴 (\ r)
  • 큰 따옴표 (\ ")
  • 작은 따옴표 (\ ')

예:

string = string.replacingOccurrences(of: "potatoes", with: "dog\'s toys", options: NSString.CompareOptions.literal, range: nil)

산출: "dog's toys + carrots"


이것이 가장 간단하고 효과적인 방법입니다. 대신 새 변수를 만드는 대신 변수 자체를 변경합니다. 나는 이것을 가능한 최선의 방법으로 설명하려고 열심히 노력 했으므로이 답변을 찬성하는 것을 기억하십시오.
Mini Official

0

text2를 선택 사항으로 인스턴스화했습니다 (예 : var text2 : String?). 이것이 문자열에 Optional ( "5")을받는 이유입니다. 빼앗아? 다음으로 대체하십시오.

var text2: String = ""

0

선택적 Int 또는 StringOptional(5) 의 값을 인쇄하려고 할 때 출력을 얻는 경우 먼저 값을 풀어야합니다.5

if let value = text {
    print(value)
}

이제 값이 이전에 풀리지 않았을 때 Swift가 추가하는 "Optional"문자열이없는 값을 얻었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.