ruby入门知识:string的创建及使用方法详解

本文主要讲ruby中的字符串的创建以及使用方法,希望能帮助到正在学习ruby(http://www.maiziedu.com/course/ruby-px/)字符串的朋友。

字符串的创建:字符串也是一种对象,和其他一般的对象一样,能够使用new的方法来创建。
eg:
str = String.new

str << 72 << 101 << 108 << 108 << 111
p
str                #=> " Hello "
字符串字面量:将想创建的字符串写在一对(")或者(‘)内
eg:

"Hello"
"中文"
‘single quoted‘
‘含有换行‘

转义符:用双引号括起来的字符串同时也可以使用转义符,转义符用反斜线“\”加上特定的记号来表示。
eg:   "\n"   "\0"

公式的展开:在双引号表示的字符串字面量中可以进行公式的展开,但是在单引号表示的字符串中则不可以。所谓公式的展开是指在字符串中括在#{ ...
}中的部分会被作为Ruby的公式来解释,它的值将被展示在字符串中。
eg:
a = 2
"a的值是#{ a }"

"a的5次方是#{ a ** 5 }"

反引号字符串:字符串如果用反引号(`)引用,就会成为一种特殊的字符串字面量。反引号中的内容将会作为shell命令被执行,命令的输出内容会被转换成字符串。

eg:
p `date`
p `pwd`

百分号记法:百分号记法中不使用反斜线来对引号字符进行转义,所以在表示包含很多引号的字符串时,减少了转义符的使用。
eg:
% q
[其中含有"的字符串]      #=>"
%Q[其中含有‘的字符串]       #=>‘

正则表达式:正则表达式是字符串进行某种模式匹配的迷你程序语言。查找或替换字符串中具有特定模式的部分时,可以很简单的对模式加以表述。

正则表达式字面量:正则表达式(Regexp)对象由正则表达式字面量来创建。正则表达式字面量就是像/Regexp/这样用斜线括起来的表达式。另外,除了使用斜线以外,还可以使用百分号记法,像%r!regexp!这样来记述。而且正则表达式字面量中转义符公式展开也是可以使用的。参数!表示该正则表达式不区分字母大小写。

对字符串进行操作:
eg:
story = <<EOS
Solomon Grundy,
Born on
Monday,
Christened on Tuseday,
Married on Wednesday,
Took ill on
Thursday,
Worse on Friday,
Died on Saturday,
Buried on Sunday,

This is the end
Of Solomon Grundy.
EOS
#根据位置对字符进行操作
p story
[ 0 ], story [ 1 ], story [ 2 ]      #=>"S", "o", "l"
p story [ 187
]                     #=>nil
#负的位置
p story [ -1 ], story [ -2 ],
story [ -3 ], story [ -4 ]        #=>"\n", ".", "y", "d"
p story [ 8, 6
]              #=>"Grundy"       用位置和长度进行操作
p story [ 8...14
]             #=>"Grundy"       用范围进行操作
p story [ "Monday" ]        
#=>"Monday"       用子字符串进行操作
p story [ /\w+sday/ ]        
#=>"Wednesday"     用正则表达式进行操作
更新:Ruby中字符串对象是可变的,所以字符串的内容也是可变的。
eg:

story [ "Solomon Grundy" ] = "Hippopotamus"
print story

#=>Hippopotamus
#Born on Monday,
#Christened on Tuseday,

#Married on Wednesday,
#Took ill on Thursday,
#Worse on Friday,

#Died on Saturday,
#Buried on Sunday,
#This is the end
#Of
Solomon Grundy.
字符串操作:
eg1:连接
"str" + "ing"          #=>"string"

str = "str"; str << "ing"
p str           #=>"string"   
破坏性的连接运算符<<
eg2:重复
"Look! " * 3       #=> "Look! Look! Look! "

eg3:分割:将一个字符串分解成多个字符串则可以使用split方法,在其参数中代入正则表达式,
"a, bb, ccc, dddd".split
( /,/ )         #=> ["a", " bb", " ccc", " dddd"]
"string".split( //
)            #=> ["s", "t", "r", "i", "n", "g"]
eg4:其他

"string".reverse             #=> "gnirts"     将字符串倒转的方法
"\n \rstring
".strip            #=>"string"    删除字符串开头和结尾空白的方法
"string" .
length              #=>6     计算字符串长度
eg5:迭代:在字符串上进行反复操作的方法
"str" .
each_byte do |byte|
      p byte          #=>115, 116, 114
end

story . each_line do |line|
     print line
end
"String" .
each_char do |char|
       p char          #=>"S", "t", "r", "i", "n",
"g"
end
eg6:格式化
printf ( "%04d", 3 )         #=>"0003"4位数,前面以0补齐

printf( "%08.4f", Math::PI * 10 )         #=>"031.4159"
printf( "hex
= %X, oct = %o", 10,10 )      #=>"hex = A, oct = 12"

String#%也具有相同的功能,而且用起来更简洁。
p "%04d" % 3
p "%08.4f" % (Math::PI * 10)

p "hex = %X, oct = %o" % [10, 10]
eg7:Encoding(编码)
"Hello" .
encoding      #=><Encoding:UTF-8>
Encoding . name_list     
#列出现在可以使用的编码方式
Encoding . find("CP1258")  #得到Encoding编码对象
eg8:Magic
Comment(魔法注释)
# -*- coding:utf-8 -*- 或 # vim:fileencoding = UTF-8

有了这样的注释,Ruby会将源代码以UTF-8的编码来看待,使用时将这样的注释添加到源代码的开头即可。

eg8:编码的更换:使用String#encode方法可以更换字符串的编码
# -*- coding:utf-8 -*-
utf =
"中国"
p utf . encoding             #=>#<Encoding:UTF-8>
sjis =
utf . encode("Shift_JIS")
p sjis . encoding            
#=>#<Encoding:Shift_JIS>
字符串的比较:字符串只有在字节表相同并且编码方式也相同的情况下才相等。

时间: 2024-08-05 22:16:43

ruby入门知识:string的创建及使用方法详解的相关文章

java入门学习:Java中的main()方法详解

本文来源:http://www.zretc.com/technologyDetail/445.html 在Java入门学习中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这

java.lang.String的trim()方法详解

String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱. 首先我直接反编译String类,找到Trim()方法: public string Trim() {    return this.TrimHelper(WhitespaceChars, 2); } TrimHelper方法有两个参数,第一个参数名WhitespaceChars,首字母尽然是大写的,肯定有文章,真不出我所料:

Android创建自定义dialog方法详解-样式去掉阴影效果

在自定义组件时,从已有组件源码中会很大收获.就拿progressDialog来说     间接父类是dialog,想了解dialog继承结构可以去百度,或者    从构造器来说ProgressDialog(Context context, int theme)很明显需要个样式主题文件,我们可以在value文件下自定义一个样式文件.   从外观上需要个动态效果控件和文本框两个属性    ProgressBar mProgress;   TextView mMessageView源码中onCreat

Laravel框架创建路由的方法详解

我这里使用的Laravel版本是5.6,路由位置在routes/web.php中,所以我们在这个文件中添加我们想要添加的路由. 1.基础路由 ? 1 2 3 4 5 6 7 8 //get请求,结果如下图 Route::get('basic1',function (){   return 'Hello World'; }); //post请求,这里不展示结果图 Route::post('basic2',function (){   return 'Post'; });  2.多请求路由 ? 1

Android基础入门教程——2.3.1 TextView(文本框)详解

Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解Android中的UI控件,本节给大家带来的UI控件是:TextView(文本框),用于显示文本的一个控件,另外声明一点,我不是翻译API文档,不会一个个属性的去扣,只学实际开发中常用的,有用的,大家遇到感觉到陌生的属性可以查询对应的API!当然,每一节开始都会贴这一节对应API文档的链接:TextVie

Android基础入门教程——2.5.2 Notification(状态栏通知)详解

Android基础入门教程--2.5.2 Notification(状态栏通知)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有:他们各自的Notification 都是不一样的!而本节给大家讲解的是基于4.x以

Linux备份入门:3种克隆方法详解_Clonezilla

摘自:http://os.51cto.com/art/201006/206871.htm 给你的系统磁盘制作一个镜像拷贝是创建备份的好办法.由于便携式U盘总是有比较低廉的价格,你可以维护数个拷贝以便循环利用.如果你的主磁盘崩溃了,你可以在几分钟之内恢复回来并继续运行.于是剩下的事情就是真正去创建镜像拷贝的操作了.有很多种方法可以完成这项任务,我们将在这里介绍几种,以便你可以学会. 制作系统磁盘的镜像拷贝最大的问题是你必须从另外一个设备启动,这样才能得到一个真正的拷贝.第一种可供选择的方法有Liv

序列内置方法详解(string/list/tuple)

一.常用方法集合 1.1.string,字符串常用方法 以下举例是python2.7测试: 函数名称 作用 举例 str.capitalize() 字符串第一个字符如果是字母,则把字母替换为大写字母.然后返回新的字符串 >>> l = 'abc cba' >>> l.capitalize() 'Abc cba' >>> l.capitalize() '2b 3c' str.center() 字符串设置为指定字符宽度,并居中.默认是用空格填充前后空白字符

Ruby入门知识总结

ruby入门掌握其实很简单,下面对我司主要使用的部分入门做一个简单的归纳总结: 文章结构: 1.变量 2.操作符 3.if~else~end .unless 4.数组(Array) 5.哈希(Hash) 6.循环(each do|变量|) 1.变量操作 变量分为:整数型(int):浮点型(float):布尔型(bool):字符串型(string) int型:1,2,3 float型:1.2 bool型:true/ false string型:"abc" 不同类型间的转换: .to_f