构造字符串字面量

方法一:
最简单的使用单引号或者双引号括起来的字符串,比如"hello"。

方法二:
使用%q配合分界符,%q代表单引号
str=%q!he/lo!

方法三:
使用%Q配合分界符,%Q代表双引号
str=%Q{he/lo}

方法四:
here document构建字符串,该方法比较适合用于多行字符串的创建。由<<和边界字符串作为开头,由边界字符串作为结尾,比如下列代码:
str = <<END_OF_STRING1
  We are here now,
  where are you?
END_OF_STRING1
puts str
输出结果为:
  We are here now,
  where are you?

较为复杂的是允许多个边界字符串对出现。
str = <<END_OF_STRING1,<<END_OF_STRING2
  We are here now,
  where are you?
END_OF_STRING1
  I will leave now,
  would you like to go with me?
END_OF_STRING2

puts str
输出结果为:
  We are here now,
  where are you?
  I will leave now,
  would you like to go with me?

连接字符串

+ 连接。ruby的+操作符不会将其右侧操作数自动转为字符串,你必须亲自动手:

planet_number=5
"hello planet #" + planet_number.to_s # to_s converts to str

在ruby中,采用字符串内插通常要比采用+操作符连接简单一些。在字符串内插时,对to_s的调用是自动进行的:
"hello planet ##{planet_number}"

字面量与copy-on-write技术

在Java中,如果两个String对象a和b的值都是"abcdef",如下:
String a="abcdef";
String b="abcdef";
那 么,JVM只会创建一个常量对象"abcdef",让a和b都指向它。但是在ruby中,采用了智能指针(熟悉c++的朋友清楚)的一个高级技术 copy-on-write,一开始也是共享同一个字符常量,但是一旦之后某个对象(比如b对象)进行了修改操作,则"abcdef"将产生一个副本,b 的修改操作在这个副本上进行。
更详细的讨论请参考http://developer.51cto.com/art/200811/98630.htm。

和Java的一些其他区别
Java的String每次执行修改操作,都不会改变自身,而是创建一个新的String对象,而Ruby每次的修改操作都会修改自身。

计算长度

puts "hello".length

访问字符和子字符串访问某个元素时返回的有由单个字符组成的字符串。
s="hello"
s[0] # "h"
s[s.length-1]
重点:
如果你试图访问一个超出了字符串末尾的字符,ruby不会抛出异常,只是简单的返回nil。

赋值:
赋值右侧可以是任意一个字符串,既可以包含多字符,也可以是空字符。
irb(main):067:0> s="hello"
=> "hello"
irb(main):068:0> s[-1]="abc"
=> "abc"
irb(main):069:0> s
=> "hellabc"
irb(main):070:0>

s[-s.length]等于s[1]

s[s.length]等于nil

获取子串:
方括号中使用有两个都好分割的操作数,第一个指定index(可以为负的),第二个指定长度值(必须非负)。

s = "hello"
s[0,2] # "he"
s[-1,1] # "o": returns a string, not the character code ?o
s[0,0] # "": a zero-length substring is always empty
s[0,10] # "hello": returns all the characters that are available
s[s.length,1] # "": there is an empty string immediately beyond the end
s[s.length+1,1] # nil: it is an error to read past that
s[0,-1] # nil: negative lengths don't make any sense

删除:
赋值非空字符串相当于删除。相应第,如果左侧的长度值为0,那么相当于插入:

s = "hello"
s[0,1] = "H" # Replace first letter with a capital letter
s[s.length,0] = " world" # Append by assigning beyond the end of the string 增加
s[5,0] = "," # Insert a comma, without deleting anything
s[5,6] = "" # Delete with no insertion; s == "Hellod"

Another way to extract, insert, delete, or replace a substring is by indexing a string
with a Range object. We’ll explain ranges in detail in §3.5 later. For our purposes here,
a Range is two integers separated by dots. When a Range is used to index a string, the
return value is the substring whose characters fall within the Range:

s = "hello"
s[2..3] # "ll": characters 2 and 3
s[-3..-1] # "llo": negative indexes work, too
s[0..0] # "h": this Range includes one character index

s[0...0] # "": this Range is empty
s[2..1] # "": this Range is also empty
s[7..10] # nil: this Range is outside the string bounds
s[-2..-1] = "p!" # Replacement: s becomes "help!"
s[0...0] = "Please " # Insertion: s becomes "Please help!"
s[6..10] = "" # Deletion: s becomes "Please!"

Don’t confuse string indexing with two comma-separated integers with this form that
uses a single Range object. Although both involve two integers, there is an important
difference: the form with the comma specifies an index and a length; the form that uses
a Range object specifies two indexes.

还可以用一个字符串来索引另一个字符串。

It is also possible to index a string with a string. When you do this, the return value is
the first substring of the target string that matches the index string, or nil, if no match
is found. This form of string indexing is really only useful on the lefthand side of an
assignment statement when you want to replace the matched string with some other
string:
s = "hello" # Start with the word "hello"
while(s["l"]) # While the string contains the substring "l"
 s["l"] = "L"; # Replace first occurrence of "l" with "L"
end # Now we have "heLLo"
Finally, you can index a string using a regular expression. (Regular expression objects
are covered in §9.2.) The result is the first substring of the string that matches the
pattern, and again, this form of string indexing is most useful when used on the
lefthand side of an assignment:
s[/[aeiou]/] = '*' # Replace first vowel with an asterisk

对字符串进行迭代

更多:

http://blog.csdn.net/csfreebird/article/details/4646140

ruby字符串相关方法的更多相关文章

  1. ruby 字符串学习2

    在一个ruby字符串中包含表但是或者变量.想使用不同的值替换表达式或者变量 1 类似java 或者python的printf-style方式 template = 'Oceania has alway ...

  2. 雷林鹏分享:Ruby 字符串(String)

    Ruby 字符串(String) Ruby 中的 String 对象存储并操作一个或多个字节的任意序列,通常表示那些代表人类语言的字符. 最简单的字符串是括在单引号(单引号字符)内.在引号标记内的文本 ...

  3. Ruby字符串(1):String基本用法

    String字符串 字符串由String类提供,除了直接使用单双引号或其它字面量创建字符串,也可以使用String.new()方法来创建. a = "hello" b = Stri ...

  4. Ruby字符串

    在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示.简单的字符串文本括在单引号中,如 'This is a simple Ruby string liter ...

  5. ruby 字符串学习笔记1

    1 从一种数据结构中构件字符串 hash = { key1: "val1", key2: "val2" } string = "" hash ...

  6. Ruby字符串的一些方法

    最近因为公司需求开始看ruby,先从ruby的基本数据类型开始看 看到ruby的字符串类型string,发现ruby中的字符串单双引号是不一样的,这点和Python有那么点不一样 主要是我们对字符串进 ...

  7. ruby 字符串常用方法学习

    引用链接:http://www.blogjava.net/nkjava/archive/2010/01/03/308088.html 1,切片:silce, [ ]-----------------[ ...

  8. Ruby字符串(2):String方法详细整理

    String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...

  9. ruby字符串学习笔记5

    1获取字符串某部分 s = "My kingdom for a string!" s.slice(3,7) # kingdom s[3,7] # kingdom s[/.ing/] ...

随机推荐

  1. hibernate篇章五--Hibernage工作原理

    Hibernage工作原理: 1.配置hibernate对象关系映射文件.启动服务器 2.服务器通过实例化Configuration对象,读取hibernate.cfg.xml文件的配置内容,并根据相 ...

  2. A swift Tour(2) Control Flow

    Control Flow 用 if 和 switch 来做条件语句,并且用for-in,for,while,和do-while做循环,条件和循环的括号是可以不写的,但是body外面的括号是必须写的 l ...

  3. Git 常用配置和使用

    Git:是一个分布式的源代码管理工具,Linux内核的代码就是用Git管理的所以它很强,也很快, 和 Vss/SVN比起来 本地Git初始化配置及其使用: 1. 初始化本地Git库:打开Git Bas ...

  4. vi 或 vim 常用命令(简单够用了)

    1.vi filename :打开或新建文件,并将光标置于第一行首 2.按下i键:编辑或插入数据3.按下shit+: ->表示可以进行命令输入 4.q! ->表示不保存退出.5.w -&g ...

  5. Spring Mvc 笔记二之异常和文件上传

    spring mvc的异常与文件上传 1.异常: spring注解版的异常有局部异常和全局异常                1.局部异常对单个controller有效;(在controller类写一 ...

  6. 2014年12月23日00:42:54——PS4

    http://tieba.baidu.com/p/3415598015?see_lz=1&pn=1 http://tieba.baidu.com/p/3188981817 http://tie ...

  7. MongoDB笔记(四)基本管理命令

    MongoDB命令帮助系统 基本命令及实例 一基本命令 二基本DDL和DML 三启动与终止 四安全管理 五数据备份恢复与迁移管理 六远程连接管理   MongoDB是一个NoSQL数据库系统:一个数据 ...

  8. 【实习记】2014-09-01从复杂到简单:一行命令区间查重+长整型在awk中的bug

        9月1号,导出sql文件后,想到了awk,但很复杂.想到了用sed前期处理+python排序比较的区间查重法.编写加调试用了约3小时. 9月2号,编写C代码的sql语句过程中,发现排序可以交m ...

  9. C# Linq To DataTable 分组统计 DEMO

    DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate);             var querySum = from t in dt.AsEnum ...

  10. 不能正确获得上次构建以来的Commit

    不能正确获得上次构建以来的Commit 如何解决?