我正在尝试找到确定字符串数组中字母数的最佳方法。我正在分割字符串,然后循环每个单词,然后分割字母并循环这些字母。
当我到达确定长度的位置时,我遇到的问题是它也在计算逗号和句号。因此,仅以字母表示的长度是不准确的。
我知道正则表达式可能要短得多,但我对此并不熟悉。我的代码通过了大多数测试,但我被困在逗号所在的位置。
E.g. 'You,' should be string.length = "3"
示例代码:
def abbr(str)
new_words = []
str.split.each do |word|
new_word = []
word.split("-").each do |w| # it has to be able to handle hyphenated words as well
letters = w.split('')
if letters.length >= 4
first_letter = letters.shift
last_letter = letters.pop
new_word << "#{first_letter}#{letters.count}#{last_letter}"
else
new_word << w
end
end
new_words << new_word.join('-')
end
new_words.join(' ')
我在循环单词之前尝试gsub
,但这不起作用,因为我不想完全删除逗号。我只是不需要他们被计算在内。
任何启示都表示赞赏。
答案 0 :(得分:0)
试试这个:
LOCAL_ARM_NEON := true
LOCAL_SRC_FILES := jsimd_arm_neon.S.neon
def abbr(str)
str.gsub /\b\w+\b/ do |word|
if word.length >= 4
"#{word[0]}#{word.length - 2}#{word[-1]}"
else
word
end
end
end
调用中的正则表达式表示&#34;一个或多个单词字符前后跟着单词边界&#34;。传递给gsub的块对每个单词进行操作,来自块的返回是替换单词&#39;在gsub中匹配。
答案 1 :(得分:0)
arr = ["Now is the time for y'all Rubiests",
"to come to the aid of your bowling team."]
arr.join.size
#=> 74
没有正则表达式
def abbr(arr)
str = arr.join
str.size - str.delete([*('a'..'z')].join + [*('A'..'Z')].join).size
end
abbr arr
#=> 58
此处和下方,arr.join
将数组转换为单个字符串。
使用正则表达式
R = /
[^a-z] # match a character that is not a lower-case letter
/ix # case-insenstive (i) and free-spacing regex definition (x) modes
def abbr(arr)
arr.join.gsub(R,'').size
end
abbr arr
#=> 58
你当然可以写:
arr.join.gsub(/[^a-z]/i,'').size
#=> 58
答案 2 :(得分:0)
你可以检查每个字符的ascii值是否在97-122或65-90。当满足这个条件时,增加一个局部变量,它将给你一个字符串的总长度,没有任何数字或任何特殊字符或任何白色空间。
答案 3 :(得分:0)
你可以使用类似的东西(短版):
a.map { |x| x.chars.reject { |char| [' ', ',', '.'].include? char } }
长版本说明:
a = ['a, ', 'bbb', 'c c, .'] # Initial array of strings
excluded_chars = [' ', ',', '.'] # Chars you don't want to be counted
a.map do |str| # Iterate through all strings in array
str.chars.reject do |char| # Split each string to the array of chars
excluded_chars.include? char # and reject excluded_chars from it
end.size # This returns [["a"], ["b", "b", "b"], ["c", "c"]]
end # so, we take #size of each array to get size of the string
# Result: [1, 3, 2]