Skip to content

Instantly share code, notes, and snippets.

@me2beats
Last active November 7, 2021 16:27
Show Gist options
  • Save me2beats/a1e65273f78bef6c155ced2f89983406 to your computer and use it in GitHub Desktop.
Save me2beats/a1e65273f78bef6c155ced2f89983406 to your computer and use it in GitHub Desktop.
String utils
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