将字符串拆分为给定字符的最简单方法是什么?例如,通过分割空间来制作单词数组;甚至制作一个字符串中所有字符的数组。
我能想到的唯一方法是在循环中使用search
。因为,所有语言都有此功能,我担心我在PostScript
中缺少一个函数来执行此操作。
答案 0 :(得分:7)
%!
%(string) (delimiter) split [(s)(t)(r)(i)(n)(g)]
/split { % str del
[ 3 1 roll % [ str del
{ % [ ... str del
search { % [ ... post match pre
3 1 roll % [ ... pre post match %ie. [ ... pre str' del
}{ % [ ... str
exit % [ ... str %% break-from-loop
}ifelse
}loop % [ ...
] % [ ... ]
} def
(string of words separated by spaces)( )split ==
%-> [(string) (of) (words) (separated) (by) (spaces)]
(string.of.words.separated.by.dots)(.)split ==
%-> [(string) (of) (words) (separated) (by) (dots)]
答案 1 :(得分:6)
您与search
运营商走在正确的轨道上。它的目的是执行文本字符串搜索和匹配。以下是PostScript Language Reference Manual中的search
运算符摘要:
search string seek search post match pre true (if found)
string false (if not found)
looks for the first occurrence of the string seek within string and
returns results of this search on the operand stack. The topmost
result is a boolean that indicates if the search succeeded.
If search finds a subsequence of string whose elements are equal
to the elements of seek, it splits string into three segments:
pre, the portion of string preceding the match; match, the portion
of string that matches seek; and post, the remainder of string. It
then pushes the string objects post, match, and pre on the operand
stack, followed by the boolean true. All three of these strings are
substrings sharing intervals of the value of the original string.
If search does not find a match, it pushes the original string
and the boolean false.
Example:
(abbc) (ab) search ==> (bc) (ab) ( ) true
(abbc) (bb) search ==> (c) (bb) (a) true
(abbc) (bc) search ==> () (bc) (ab) true
(abbc) (B) search ==> (abbc) false