在接觸3Dmax時(shí),避免不了會(huì)使用到maxscript來編寫腳本。
有個(gè)需求,就是常用的字符串替換,想到的就是replace方法。
但是,在maxscript中replace的使用是這樣的。
replace <string> <from_integer> <length_integer> <new_string>
將字符串<string>里從序號<from_integer>開始,長度為<length_integer>的子字符串用新
字符串<new_string>替換,并返回新的字符串。<from_integer>與<length_integer>的和必須小
于字符串的總長度。例如:
s = "1234567890"
s1=replace s 5 3 "inserted string" --返回"1234inserted string890"
這個(gè)API是替換字符串指定位置,指定長度的字符。并不是我想要的,離需求還差點(diǎn)。
我的需求是希望這個(gè)方法是這樣的:replace(源字符,要查找的字符,要替換的字符)
經(jīng)過分析,我們可以基于maxscript的原有API實(shí)現(xiàn)一個(gè),代碼如下:
- --將字符串str1中的str2替換成str3
- fn replaceSub str1 str2 str3=(
- while ((i=findstring str1 str2) != undefined) do
- (
- str1 = replace str1 i str2.count str3
- )
- return str1
- )
調(diào)用示例:
str="我喜歡編程"
str=replaceSub str "喜歡" "熱愛"
print(str) //輸出:我熱愛編程
另外,還有一個(gè)方法也記錄一下,主要在插件開發(fā)中處理骨骼名稱:
- --"Bip002 L UpperArm"處理字符串,去掉Bip002比如只保留名字L UpperArm
- fn subName str=(
- str=replaceSub str "_" " "
- str=trimRight(trimLeft(str))
- ls=filterString str " "
- out=ls[1]
- if ls.count>1 then
- (
- out=substring str (ls[1].count+2) -1
- )
- return out
- )
OK,需求解決。