Last active
November 7, 2021 16:27
-
-
Save me2beats/a1e65273f78bef6c155ced2f89983406 to your computer and use it in GitHub Desktop.
String utils
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
class_name StringU | |
static func invert_string(s:String)->String: | |
var chars_pool = PoolStringArray() | |
var length = s.length() | |
chars_pool.resize(length) | |
for i in length: | |
chars_pool[i] = s[i] | |
chars_pool.invert() | |
return chars_pool.join("") | |
static func str_mult(s:String, times:int)->String: | |
if not times: return '' | |
var res = s | |
for i in times-1: | |
res+= s | |
return res | |
static func snake2camel(string:String)->String: | |
var result = PoolStringArray() | |
var prev_is_underscore = false | |
for ch in string: | |
if ch=='_': | |
prev_is_underscore = true | |
else: | |
if prev_is_underscore: | |
result.append(ch.to_upper()) | |
else: | |
result.append(ch) | |
prev_is_underscore = false | |
return result.join('') | |
static func snake2pascal(string:String)->String: | |
var result = snake2camel(string) | |
result[0] = result[0].to_upper() | |
return result | |
static func camel2snake(string:String)->String: | |
var result = PoolStringArray() | |
for ch in string: | |
if ch == ch.to_lower(): | |
result.append(ch) | |
else: | |
result.append('_'+ch.to_lower()) | |
return result.join('') | |
static func pascal2snake(string:String)->String: | |
var result = PoolStringArray() | |
for ch in string: | |
if ch == ch.to_lower(): | |
result.append(ch) | |
else: | |
result.append('_'+ch.to_lower()) | |
result[0] = result[0][1] | |
return result.join('') | |
# this one is better | |
static func pascal2snake(string:String)->String: | |
var result = PoolStringArray() | |
var recent_is_digit = true | |
for ch in string: | |
ch = ch as String | |
if ch.is_valid_integer(): | |
recent_is_digit = true | |
result.append(ch) | |
else: | |
if recent_is_digit: | |
result.append(ch.to_lower()) | |
elif ch == ch.to_lower(): | |
result.append(ch) | |
else: | |
result.append('_'+ch.to_lower()) | |
recent_is_digit = false | |
return result.join('') | |
#=============== not tested! ======================= | |
static func split_strip(s:String, delim = " ")->PoolStringArray: | |
var res: = PoolStringArray() | |
res = s.split(delim, false) | |
for i in range(res.size()): | |
res[i] = res[i].strip_edges() | |
return res | |
static func split_lstrip(s:String, delim = " ")->PoolStringArray: | |
var res: = PoolStringArray() | |
res = s.split(delim, false) | |
for i in range(res.size()): | |
res[i] = res[i].lstrip(" ") | |
return res | |
static func replace(s:String, start_idx:int, end_idx:int, with:String)->String: | |
if end_idx<start_idx: return s | |
var start = s.substr(0, start_idx) | |
var end = s.substr(end_idx) | |
var new:String = start+with+end | |
return new |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment