Last active
July 13, 2020 12:11
-
-
Save ChrisMarshallNY/c4836fb64960734791e499ccf98ccbb2 to your computer and use it in GitHub Desktop.
Strange Character Set Comparison Issue
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
public extension StringProtocol { | |
func containsOneOfThese(_ inCharacterset: CharacterSet) -> Bool { | |
self.contains { (char) in | |
char.unicodeScalars.contains { (scalar) in inCharacterset.contains(scalar) } | |
} | |
} | |
func containsOneOfThese(_ inString: String) -> Bool { | |
return false | |
} | |
} | |
let space = " " | |
let joker = "๐" | |
let both = space + joker | |
let spadesNumberCards = "๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช" | |
let spadesFaceCards = "๐๐ฎ๐ซ๐ญ" | |
let testString1 = spadesNumberCards + space + spadesFaceCards | |
let testString2 = spadesNumberCards + joker + spadesFaceCards | |
let testString3 = spadesNumberCards + both + spadesFaceCards | |
print("These Are The Strings We Are Testing:\n") | |
print("Test String 1: \"\(testString1)\"") | |
print("Test String 2: \"\(testString2)\"") | |
print("Test String 3: \"\(testString3)\"") | |
print("\nFirst, See If Any Of the Strings Contain Spaces:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(space.unicodeScalars)) ? "" : "not ")have a space.") | |
print("\nNext, See If Any Of the Strings Contain Jokers:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(joker.unicodeScalars)) ? "" : "not ")have a joker.") | |
print("\nIt Now Works:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(both.unicodeScalars)) ? "" : "not ")have a space or a joker.") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
public extension StringProtocol { | |
func containsOneOfThese(_ inCharacterset: CharacterSet) -> Bool { | |
self.contains { (char) in | |
char.unicodeScalars.contains { (scalar) in inCharacterset.contains(scalar) } | |
} | |
} | |
} | |
let space = " " | |
let joker = "๐" | |
let both = space + joker | |
let spadesNumberCards = "๐ก๐ข๐ฃ๐ค๐ฅ๐ฆ๐ง๐จ๐ฉ๐ช" | |
let spadesFaceCards = "๐๐ฎ๐ซ๐ญ" | |
let testString1 = spadesNumberCards + space + spadesFaceCards | |
let testString2 = spadesNumberCards + joker + spadesFaceCards | |
let testString3 = spadesNumberCards + both + spadesFaceCards | |
print("These Are The Strings We Are Testing:\n") | |
print("Test String 1: \"\(testString1)\"") | |
print("Test String 2: \"\(testString2)\"") | |
print("Test String 3: \"\(testString3)\"") | |
print("\nFirst, See If Any Of the Strings Contain Spaces:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: space)) ? "" : "not ")have a space.") | |
print("\nNext, See If Any Of the Strings Contain Jokers:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: joker)) ? "" : "not ")have a joker.") | |
print("\nOK, Now it gets weird:\n") | |
print("Test String 1 does \(testString1.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.") | |
print("Test String 2 does \(testString2.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.") | |
print("Test String 3 does \(testString3.containsOneOfThese(CharacterSet(charactersIn: both)) ? "" : "not ")have a space or a joker.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment