Code Monkey home page Code Monkey logo

swiftypystring's Introduction

SwiftyPyString

Build Status Cocoapods carthage GitHub release Cocoapods platforms Swift Version

SwiftyPyString is a string extension for Swift.
This library provide Python compliant String operation methods.

Installation

Cocoapods

pod 'SwiftyPyString'

Carthage

github 'ChanTsune/SwiftyPyString'

Swift Package Manager

import PackageDescription

let package = Package(
    name: "YourProject",
    dependencies: [
        .package(url: "https://github.com/ChanTsune/SwiftyPyString.git", from: "\(version)")
    ]
)

Usage

import SwiftyPyString

String extension

String sliceing subscript

let str = "0123456789"
str[0]
// 0
str[-1]
// 9

Slice String

let str = "0123456789"

str[0,5]
// 01234
str[0,8,2]
// 0246
str[nil,nil,-1]
// 9876543210

Use Slice object case

let str = "0123456789"
var slice = Slice(start:0, stop:5)
var sliceStep = Slice(start:0, stop:8, step:2)

str[slice]
// 01234
str[sliceStep]
// 0246

String Multiplication

var s = "Hello World! " * 2

// "Hello World! Hello World! "

Methods

capitalize()

"hello world!".capitalize() // "Hello world!"

casefold()

"ß".casefold() // "ss"

center(width [,fillchar])

"1234".center(10) // "   1234   "
"123"center(10) // "   123    "
"1234".center(10,fillchar:"0") // "0001234000"
"123"center(10,fillchar:"0") // "0001230000"

count(sub [,start [,end]])

"abc abc abc".count("abc") // 3
"aaaaaaaaaa".count("a", start:2) // 8
"bbbbbbbbbb".count("bb", end:8) // 4

endswith(suffix [,start [,end]])

"hello world!".endswith("!") // true
"hello world!".endswith("world!")  // true
"hello".endswith("world") // false
"hello".endswith(["hello","world","!"]) // true

expandtabs(tabsize=8)

"abc\tabc\t".expandtabs() // "abc        abc        "
"abc\tabc\t".expandtabs(4) // "abc    abc    "

find(sub [,start [,end]])

"123412312312345".find("123") // 0
"123412312312345".find("12345") // 10
"123412312312345".find("5") // 14
"123412312312345".find("31") // 6
"123412312312345".find("0") // -1

format(args...,kwargs)

Available after v2.0

"{}, {}, {}".format("a", "b", "c") // "a, b, c"
"{0}, {1}, {2}".format("a", "b", "c") // "a, b, c"
"{0}{1}{0}".format("abra", "cad") // "abracadabra"
"{:,}".format(1234567890) // "1,234,567,890"

Format specification

https://docs.python.org/3/library/string.html#format-specification-mini-language

format_map(kwargs)

Available after v2.0

"{A}, {B}, {C}".format(["A": "a", "B": "b", "C": "c"]) // "a, b, c"
"{number:,}".format(["number":1234567890]) // "1,234,567,890"

Format specification

https://docs.python.org/3/library/string.html#format-specification-mini-language

index(sub [,start [,end]]) throws

"123412312312345".index("123") // 0
"123412312312345".index("12345") // 10
"123412312312345".index("5") // 14
"123412312312345".index("31") // 6
"123412312312345".index("0") // throw PyException.ValueError

isalnum()

"123abc".isalnum() // true
"1000A".isalnum() // true
"日本語".isalnum() // true
"abc 123".isalnum() // false

isalpha()

"I have pen.".isalpha() // false
"qwerty".isalpha() // true
"日本語".isalpha() // true
"123".isalpha() // false
"".isalpha() // false

isascii()

"I have pen.".isascii() // trur
"qwerty".isascii() // true
"123".isascii() // true
"".isascii() // true
"非ASCII文字列".isascii() // false

isdecimal()

"123".isdecimal() // true
"12345".isdecimal() // true
"".isdecimal() // false
"".isdecimal() // false

isdigit()

"123".isdigit() // true
"12345".isdigit() // true
"".isdigit() // true
"".isdigit() // true

islower()

"lower case string".islower() // true
"Lower case string".islower() // false
"lower case String".islower() // false
"lower Case string".islower() // false
"小文字では無い".islower() // false

isnumeric()

"123".isnumeric() // true
"12345".isnumeric() // true
"".isnumeric() // true
"".isnumeric() // false

isprintable()

"".isprintable() // true
"abc".isprintable() // true
"\u{060D}".isprintable() // false

isspace()

" ".isspace() // true
"".isspace() // false
"Speace".isspace() // false

istitle()

"Title Case String".istitle() // true
"Title_Case_String".istitle() // true
"Title__Case  String".istitle() // true
"not Title Case String".istitle() // false
"NotTitleCaseString".istitle() // false
"Not Title case String".istitle() // false

isupper()

"UPPER CASE STRING".isupper() // true
"Upper Case String".isupper() // false
"大文字では無い".isupper() // false

join(iterable)

let array = ["abc","def","ghi"]
"".join(array) // "abcdefghi"
"-".join(array) // "abc-def-ghi"
"++".join(array) // "abc++def++ghi"

ljust(width [,fillchar])

"abc".ljust(1) // "abc"
"abc".ljust(5) // "  abc"
"abc".ljust(5, fillchar:"$") // "$$abc"

lower()

"ABCDE".lower() // "abcde"
"あいうえお".lower() // "あいうえお"

lstrip(chars=nil)

"  lstrip sample".lstrip() // "lstrip sample"
"  lstrip sample".lstrip(" ls") // "trip sample"
"lstrip sample".lstrip() // "lstrip sample"

maketrans(x [,y [,x]])

String.maketrans([97:"A",98:nil,99:"String"]) // ["a":"A","b":"","c":"String"]
String.maketrans(["a":"A","b":nil,"c":"String"]) // ["a":"A","b":"","c":"String"]
String.maketrans("abc",y: "ABC") // ["a":"A","b":"B","c":"C"]
String.maketrans("abc", y: "ABC", z: "xyz") // ["a":"A","b":"B","c":"C","x":"","y":"","z":""]

partition(sep)

"a,b,c".partition(",") // ("a",",","b,c")
"a,b,c".partition("x") // ("a,b,c","","")

replace(old, new [,count])

"abc".replace("bc", new: "bcd") // "abcd"
"Python python python python".replace("python", new: "Swift", count: 2) // "Python Swift Swift python"

rfind(sub [,start [,end]])

"0123456789".rfind("0") // 0
"0123456789".rfind("02") // -1
"0123454321".rfind("2") // 8
"0123454321".rfind("1", end: -1) // 1

rindex(sub [,start [,end]]) throws

"0123456789".rindex("0") // 0
"0123456789".rindex("02") // throw PyException.ValueError
"0123454321".rindex("2") // 8
"0123454321".rindex("1", end: -1) // 1

rjust(width [,fillchar])

"abc".rjust(1) // "abc"
"abc".rjust(5) // "abc  "
"abc"rjust(5,fillchar:"z") // "abczz"

rpartition(sep)

"a,b,c".rpartition(",") // ("a,b", ",", "c")
"a,b,c".rpartition("x") // ("", "", "a,b,c")

rsplit(sep=nil [,maxsplit])

"a,b,c,d,".rsplit(",") // ["a", "b", "c", "d", ""]
"a,b,c,d,".rsplit() // ["a,b,c,d,"]
"a,b,c,d,".rsplit(",", maxsplit: 2) // ["a,b,c","d", ""]
"a,b,c,d,".rsplit(",", maxsplit: 0) // ["a,b,c,d,"]
"aabbxxaabbaaddbb".rsplit("aa", maxsplit: 2) // ["aabbxx", "bb", "ddbb"]

rstrip(chars=nil)

"rstrip sample   ".rstrip() // "rstrip sample"
"rstrip sample   ".rstrip("sample ") // "rstri"
"  rstrip sample".rstrip() // "  rstrip sample"

split(sep=nil [,maxsplit])

"a,b,c,d,".split(",") // ["a", "b", "c", "d", ""]
"a,b,c,d,".split() // ["a,b,c,d,"]
"a,b,c,d,".split(",", maxsplit: 2) // ["a", "b", "c,d,"]
"a,b,c,d,".split(",", maxsplit: 0) // ["a,b,c,d,"]
"aabbxxaabbaaddbb".split("aa", maxsplit: 2) // ["", "bbxx", "bbaaddbb"]

splitlines([keepends])

"abc\nabc".splitlines() // ["abc", "abc"]
"abc\nabc\r".splitlines(true) // ["abc\n", "abc\r"]
"abc\r\nabc\n".splitlines() // ["abc", "abc"]
"abc\r\nabc\n".splitlines(true) // ["abc\r\n", "abc\n"]

startswith(prefix [,start [,end]])

"hello world!".startswith("hello") // true
"hello world!".startswith("h") // true
"hello".startswith("world") // flase
"hello".startswith(["hello", "world", "!"]) // true

strip(chars=nil)

"   spacious   ".strip() // "spacious"
"www.example.com".strip("cmowz.") // "example"

swapcase()

"aBcDe".swapcase() // "AbCdE"
"AbC dEf".swapcase() // "aBc DeF"
"あいうえお".swapcase() // "あいうえお"

title()

"Title letter".title() // "Title Letter"
"title Letter".title() // "Title Letter"
"abc  abC _ aBC".title() // "Abc  Abc _ Abc"

translate(transtable)

let table = String.maketrans("", y: "", z: "swift")

"I will make Python like string operation library".translate(table)
// "I ll make Pyhon lke rng operaon lbrary"

upper()

"abcde".upper() // "ABCDE"
"あいうえお".upper() // "あいうえお"

zfill()

"abc".zfill(1) // "abc"
"abc".zfill(5) // "00abc"
"+12".zfill(5) // "+0012"
"-3".zfill(5) // "-0003"
"+12".zfill(2) // "+12"

For more detail please refer below link
https://docs.python.org/3/library/stdtypes.html#string-methods

Sliceable protocol

protocol Sliceable : Collection {
    init() /* Required. */
    subscript (_ start: Int?, _ stop: Int?, _ step: Int?) -> Self { get }
    subscript (_ start: Int?, _ end: Int?) -> Self { get }
    subscript (_ i:Int) -> Self.Element { get } /* Required. */
    subscript (_ slice: Slice) -> Self { get }
    mutating func append(_ newElement: Self.Element) /* Required. */
}

With the introduction of SwiftyPyString, String conforms to the Sliceable protocol.

By conforming to Sliceable protocol, it can get partial sequences as introduced in Slice String.

If the type you want to conform to Sliceable is conforms to RangeReplaceableCollection, it can be used simply by defining subscript (_ i:Int) -> Self.Element { get }.

In addition, if associatedtype Index of Collection is Int, you can conform to Sliceable with a very short code as follows, like Array.

extension Array : Sliceable { }
let arr = [1, 2, 3, 4, 5]

arr[0, 3]
// [0, 1, 2]

let slice = Slice(step:2)

arr[slice]
// [1, 3, 5]

License

This project published under the MIT license. See the LICENSE file for more information.

swiftypystring's People

Contributors

chantsune avatar dependabot[bot] avatar

Stargazers

 avatar

Watchers

 avatar  avatar

swiftypystring's Issues

change in behavior of the `replace` method in python 3.9

change in behavior of the replace method in python 3.9
Before

"".replace("", "p") = "p"
"".replace("", "p", 1) = ""
"".replace("", "p", 2) = ""

After

"".replace("", "p") = "p"
"".replace("", "p", 1) = "p"
"".replace("", "p", 2) = "p"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.