我想用空格,逗号和点分隔字符串。鉴于此输入:
public class MyEntity {
@Id
@Column
private int myId;
private int anotherData;
... (getters and setters) ...
}
我要输出:
"hello this is a hello, allright this is a hello."
我尝试过:
hello 3
a 2
is 2
this 2
allright 1
这将输出:
puts "Enter string "
text=gets.chomp
frequencies=Hash.new(0)
delimiters = [',', ' ', "."]
words = text.split(Regexp.union(delimiters))
words.each { |word| frequencies[word] +=1}
frequencies=frequencies.sort_by {|a,b| b}
frequencies.reverse!
frequencies.each { |wor,freq| puts "#{wor} #{freq}"}
我不希望输出的最后一行。它将空间视为
字也。这可能是因为存在连续的定界符(hello 3
a 2
is 2
this 2
allright 1
1
,,
,&
)。
答案 0 :(得分:7)
使用正则表达式:
str = 'hello this is a hello, allright this is a hello.'
str.split(/[.,\s]+/)
# => ["hello", "this", "is", "a", "hello", "allright", "this", "is", "a", "hello"]
这使您可以通过请求的三个定界符中的任意一个来分割字符串。
stop和逗号是不言自明的,\s
指的是空格。 +
表示我们匹配其中一个或多个,并表示在顺序出现2个以上字符的情况下避免空字符串。
您可能会发现Regex101提供的说明很方便,请访问https://regex101.com/r/r4M7KQ/3。
编辑:要获得加分,这是一种使用each_with_object
来获得字数的好方法:)
str.split(/[.,\s]+/).each_with_object(Hash.new(0)) { |word, counter| counter[word] += 1 }
# => {"hello"=>3, "this"=>2, "is"=>2, "a"=>2, "allright"=>1}