Ruby中常用的字符串处理函数使用实例

1.返回字符串的长度


代码如下:

str.length => integer

2.判断字符串中是否包含另一个串


代码如下:

str.include? other_str => true or false
"hello".include? "lo"   #=> true
"hello".include? "ol"   #=> false
"hello".include? ?h     #=> true

3.字符串插入


代码如下:

str.insert(index, other_str) => str
"abcd".insert(0, 'X')    #=> "Xabcd"
"abcd".insert(3, 'X')    #=> "abcXd"
"abcd".insert(4, 'X')    #=> "abcdX"
"abcd".insert(-3, 'X')
-3, 'X')   #=> "abXcd"
"abcd".insert(-1, 'X')   #=> "abcdX"

4.字符串分隔,默认分隔符为空格


代码如下:

str.split(pattern=$;, [limit]) => anArray
" now's the time".split        #=> ["now's", "the", "time"]
"1, 2.34,56, 7".split(%r{,\s*}) #=> ["1", "2.34", "56", "7"]
"hello".split(//)               #=> ["h", "e", "l", "l", "o"]
"hello".split(//, 3)            #=> ["h", "e", "llo"]
"hi mom".split(%r{\s*})         #=> ["h", "i", "m", "o", "m"]
"mellow yellow".split("ello")   #=> ["m", "w y", "w"]
"1,2,,3,4,,".split(',')         #=> ["1", "2", "", "3", "4"]
"1,2,,3,4,,".split(',', 4)      #=> ["1", "2", "", "3,4,,"]

5.字符串替换


代码如下:

str.gsub(pattern, replacement) => new_str
str.gsub(pattern) {|match| block } => new_str
"hello".gsub(/[aeiou]/, '*')              #=> "h*ll*"     #将元音替换成*号
"hello".gsub(/([aeiou])/, '<\1>')         #=> "h<e>ll<o>"   #将元音加上尖括号,\1表示保留原有字符???
"hello".gsub(/./) {|s| s[0].to_s + ' '}   #=> "104 101 108 108 111 "

字符串替换二:

代码如下:

str.replace(other_str) => str
s = "hello"         #=> "hello"
s.replace "world"   #=> "world"

6.字符串删除


代码如下:

str.delete([other_str]+) => new_str
"hello".delete "l","lo"        #=> "heo"
"hello".delete "lo"            #=> "he"
"hello".delete "aeiou", "^e"   #=> "hell"
"hello".delete "ej-m"          #=> "ho"

7.去掉前和后的空格


代码如下:

str.lstrip => new_str
" hello ".lstrip   #=> "hello "
"hello".lstrip       #=> "hello"

8.字符串匹配


代码如下:

str.match(pattern) => matchdata or nil

9.字符串反转


代码如下:

str.reverse => new_str
"stressed".reverse   #=> "desserts"

10.去掉重复的字符


代码如下:

str.squeeze([other_str]*) => new_str
"yellow moon".squeeze                  #=> "yelow mon" #默认去掉串中所有重复的字符
" now   is the".squeeze(" ")         #=> " now is the" #去掉串中重复的空格
"putters shoot balls".squeeze("m-z")   #=> "puters shot balls" #去掉指定范围内的重复字符

11.转化成数字


代码如下:

str.to_i=> str
"12345".to_i             #=> 12345

chomp和chop的区别:

chomp:去掉字符串末尾的\n或\r
chop:去掉字符串末尾的最后一个字符,不管是\n\r还是普通字符

代码如下:

"hello".chomp            #=> "hello"
"hello\n".chomp          #=> "hello"
"hello\r\n".chomp        #=> "hello"
"hello\n\r".chomp        #=> "hello\n"
"hello\r".chomp          #=> "hello"
"hello".chomp("llo")     #=> "he"

"string\r\n".chop   #=> "string"
"string\n\r".chop   #=> "string\n"
"string\n".chop     #=> "string"
"string".chop       #=> "strin"

split是String类的一个类方法,我根据ri String.split提供的内容简单翻译一下。
----------------------------------------------------------- String#split
str.split(pattern=$;, [limit]) => anArray
------------------------------------------------------------------------
Divides _str_ into substrings based on a delimiter, returning an
array of these substrings.
将一个字符串用分隔符分割成一些子字符串,并返回一个包含这些子字符串的数组。

If _pattern_ is a +String+, then its contents are used as the
delimiter when splitting _str_. If _pattern_ is a single space,
_str_ is split on whitespace, with leading whitespace and runs of
contiguous whitespace characters ignored.
如果pattern部分是一个字符串,那么用它作分割符来分隔,如果pattern是一个空格,那么在空格处分割,并且临近的空格被忽略。

If _pattern_ is a +Regexp+, _str_ is divided where the pattern
matches. Whenever the pattern matches a zero-length string, _str_
is split into individual characters.
如果pattern是个正则表达式,那么在匹配pattern的地方分割,当pattern是长度为0的字符串,那么split将把字符串分割为单个字符

If _pattern_ is omitted, the value of +$;+ is used. If +$;+ is
+nil+ (which is the default), _str_ is split on whitespace as if `
' were specified.
如果pattern被忽略,将用$;来分隔,如果$;没有设置(就是在默认状态),split将制定空格' '
If the _limit_ parameter is omitted, trailing null fields are
suppressed. If _limit_ is a positive number, at most that number of
fields will be returned (if _limit_ is +1+, the entire string is
returned as the only entry in an array). If negative, there is no
limit to the number of fields returned, and trailing null fields
are not suppressed.
如果limit参数被忽略,跟踪空段被抑制,如果limit是个正数,那么至多返回limit个字段(如果是1,那么将整个字符串作为一个字段返回),如果是个负数,那么跟踪空段不被抑制。

" now's the time".split #=> ["now's", "the", "time"]
" now's the time".split(' ') #=> ["now's", "the", "time"]
" now's the time".split(/ /) #=> ["", "now's", "", "the", "time"]
"1, 2.34,56, 7".split(%r{,\s*}) #=> ["1", "2.34", "56", "7"]
"hello".split(//) #=> ["h", "e", "l", "l", "o"]
"hello".split(//, 3) #=> ["h", "e", "llo"]
"hi mom".split(%r{\s*}) #=> ["h", "i", "m", "o", "m"]

"mellow yellow".split("ello") #=> ["m", "w y", "w"]
"1,2,,3,4,,".split(' ,') #=> ["1", "2", "", "3", "4"]
"1,2,,3,4,,".split(',', 4) #=> ["1", "2", "", "3,4,,"]
"1,2,,3,4,,".split(',', -4) #=> ["1", "2", "", "3", "4", "", ""]

如果包含特殊字符,注意转义
"wo | shi | yi | ge | bing".split(/\s*\|\s*) #竖杠别忘了转义

还有它和String.scan的区别,split中的pattern是分隔符,而scan中的pattern指的是要匹配的东西。

"123=342=4234=523421=6424".scan(/\d+/) #=> ["123","342","4234","523421","6424"]

如果匹配项被括起来,那么则会保留分割符,例如:

"Three little words".split(/\s+/) #===>["three","little",words"]
"Three little words".split(/(\s+)/) #===>["three"," ","little"," ","words"] 保留了空格

时间: 2015-01-19

Ruby简洁学习笔记(一):字符串、数字、类和对象

为了证明Ruby真的好用,hello world也能写的如此简洁: 复制代码 代码如下: puts 'hello world' 1.输入/输出 复制代码 代码如下: print('Enter your name') name=gets() puts("Hello #{name}") 注:Ruby是区分大小写的 2.String类 puts("Hello #{name}")中的变量 name是内嵌在整个String里的,通过 #{ } 包裹进行内嵌求值,并用双引号&q

Ruby中字符串左侧补零方法实例

最近有个需求,把数字显示成固定的位数,位数不足的在前面以零补充 比如 5 位: 复制代码 代码如下: 3 -> 00003 292 -> 00292 12422 -> 12422 发现 Ruby 很容易就可以实现了 复制代码 代码如下: irb> "%05d" % 12422 "12422" irb> "%05d" % 22 "00022" 上面的方法基本上是标准作法.如果是直接处理字符串,也可以

Ruby中操作字符串的一些基本方法

在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: 'Won\'t you read O\'Reilly\'s book?' 反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符. 以下是字

Ruby中创建字符串的一些技巧小结

%{String}  用于创建一个使用双引号括起来的字符串 %Q{String} 用于创建一个使用双引号括起来的字符串 复制代码 代码如下: str=<<END_OF_STRING   a string   END_OF_STRING %Q!Some String of "Characters"! <==> " Some String of /"Characters/" " %q{String} 用于创建一个使用单引号括起

Ruby字符串、条件、循环、数组、Hash、类基本操作笔记

一.字符串操作 字符串插值 1.#{}: 任意放置在#{}中的合法Ruby代码都将被求值,并被替换为求值结果插入到原位置 2.单引号与双引号差别: 双引号允许字符转义,单引号不允许转义,里是什么字符,用户看到的就是什么字符 单引号不允许字符插值 字符串拆分 1.以空格拆分:string.split(' ')字符串连接 方法一.'Ruby' + 'Monk', stdout: RubyMonk 方法二."Monk".concat("Ruby") stdout: Mon

Ruby编写HTML脚本替换小程序的实例分享

在一个文件里有很多以下内容: <p style="display:none">此题选D. .... .... .... </p> 而本人要实现的功能是将它替换成: <div style="display:none" class="sl_explain">此题选D. ..... ..... ..... </div> 这个东西看起来有点简单,但本人整整花了半天才实现此功能,主要是很久没写RUBY程序了,

详解Ruby中正则表达式对字符串的匹配和替换操作

正则匹配 说起Ruby当然要提起它的正则表达式机制,正则表达式作为一个强大的匹配语言已经越来越多的使用到不同的领域当中,从字符串验证,匹配,到网页抽取等.虽然有些人诟病与正则表达式的匹配效率,但是考虑到正则的强大匹配能力也就无所谓了. 说起Ruby正则表达式不就不能不说起Ruby的=~和match两种匹配方式,我们还是用实例来说明一下这两种匹配方式的区别吧.先来说一说=~的用法吧: message="afhadhffkdf414j" regex=/[a-z](\d{3})[a-z]/

Ruby 字符串处理

Ruby将字符串像数字一样处理.我们用单引号('...')或双引号("...")将它们括起来. ruby> "abc" "abc" ruby> 'abc' "abc" 单引号和双引号在某些情况下有不同的作用.一个由双引号括起来的字符串允许字符由一个前置的斜杠引出,而且可以用#{}内嵌表达式.而 单引号括起来的字符串并不会对字符串作任何解释;你看到的是什么便是什么.几个例子: ruby> print "

Ruby的字符串与数组求最大值的相关问题讨论

max方法 b=[1,3,55,777,2,4,6,8,0] 对于数值型的数据,max会得到数组的最大值,min得到数组的最小值 b.max => 777 b.min => 0 而对于字符串型数组比较大小没有实际意义, ruby中给出的例子是 # enum.max -> obj # enum.max { |a, b| block } -> obj #a = %w(albatross dog horse) #a.max => "horse" # a.max

Ruby中的字符串编写示例

优先使用 字符串插值 来代替 字符串串联. # bad email_with_name = user.name + ' <' + user.email + '>' # good email_with_name = "#{user.name} <#{user.email}>" # good email_with_name = format('%s <%s>', user.name, user.email) Consider padding string

Ruby中实现把字符串转换为类的2种方法

最近有个需求,需要根据一个字符串当作一个类来使用,例如: 有一个字符串 "ChinaMag",根据这个字符串调用 类 ChinaMag下的方法. 解决办法: 1.rails可以使用 constantize方法. 复制代码 代码如下: pry(main)> 'ChinaMag'.constantize => ChinaMag pry(main)> "Test::Unit".constantize => Test::Unit 2.ruby可以使用

java8 统计字符串字母个数的几种方法总结(推荐)

1.统计字符串字母个数(并且保持字母顺序) 比如: aabbbbbbbba喔喔bcab cdabc deaaa 目前我做知道的有5种方式噢,如果你还有更好的,欢迎赐教 //方式1 public static void letterCount1(String s) { s=s.replaceAll(" +", ""); //1,转换成字符数组 char c[]=s.toCharArray(); Map<Character, Integer> tree=ne

JavaScript字符串转数字的5种方法及遇到的坑

String转换为Number有很多种方式,我可以想到的有5种! parseInt(num); // 默认方式 (没有基数) parseInt(num, 10); // 传入基数 (十位数) parseFloat(num) // 浮点数 Number(num); // Number 构造器 ~~num //按位非 num / 1 // 除一个数 num * 1 // 乘一个数 num - 0 // 减去0 +num // 一元运算符 "+" 选择哪一种呢?什么时候选择它?为什么选择这种

js定义类的几种方法(推荐)

ECMAScript6已经支持了class,但之前版本都不支持类,但是可以通过一些方法来模拟类. js中的类,既是重点,也是难点,很多时候都感觉模棱两可. 首先强调一下js中很重要的3个知识点:this.prototype.constructor. 下面我们来总结一下定义(模拟)类的几种方法: 1.工厂模式 function createObject(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj.ge

Python中字典(dict)合并的四种方法总结

本文主要给大家介绍了关于Python中字典(dict)合并的四种方法,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型. 字典类型与序列类型的区别: 1. 存取和访问数据的方式不同. 2. 序列类型只用数字类型的键(从序列的开始按数值顺序索引

Javascript使用function创建类的两种方法(推荐)

1.使用function类 //myFunction.js var CMyFunc=function() { //类的公共方法,供外部调用 this.Func1=function() { var i=0; return i; } this.Func2=function() { _privateFunc(); } //类中的私有方法,供公共方法调用 function _privateFunc() { return 0; ] } CMyFunc myFunc=new CMyFunc(); 使用:其它

跟我学习javascript创建对象(类)的8种方法

8中javascript创建对象(类)的方法,依依介绍给大家,希望大家喜欢. 1. 使用Object构造函数来创建一个对象 下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name="kevin"; person.age=31; alert(person.name); alert(person["name"]) 上述写法的另外一种表现形式是使用对象字面量创建一个对象,不要

Flask中获取小程序Request数据的两种方法

Flask中获取小程序Request数据的两种方法 作为后端屌对于前端确实讳莫如深,JS中的类型Object竟然不能直接通过POST传入到后台Flask中,您会发现获取的是[object Object],这货在Flask中只是个Str,哈哈... 于是,开始寻求解决方案: 方案一,通过GET或者POST传参,将Object转换为Str请求数据: 1.在util.js中定义一个JS函数: function json2Form(json) { var str = []; for (var p in

python3中获取文件当前绝对路径的两种方法

方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworking.py'] 方法2: import os print(os.getcwd()) print(os.listdir()) print(os.path.join(os.getcwd(),os.listdir()[1])) D:\pycharm\PracticeProject ['.idea', 'C

ASP.Net中利用CSS实现多界面的两种方法

本文实例讲述了ASP.Net中利用CSS实现多界面的两种方法.分享给大家供大家参考.具体实现方法如下: 可以通过使页面动态加载不同CSS来实现多界面的效果: 方法一: 复制代码 代码如下: <%@page language="C#"%> <%@import namespace="System.Data"%> <script language="c#" runat="server"> publ