Ruby中的chop和chomp用法辨析

      还没开始系统性的学习Ruby,最近在看metasploit框架的exploit会涉及到Ruby脚本,也就硬着头皮一遍查阅资料一遍做些笔记吧。

      Ruby字符串中存在chop和chomp的内置函数。我在http://www.w3cschool.cc/ruby/ruby-string.html中得到的关于Ruby字符串chop和chomp的用法介绍如下:

str.chomp
从字符串末尾移除记录分隔符($/),通常是 \n。如果没有记录分隔符,则不进行任何操作。
str.chomp!
与 chomp 相同,但是 str 会发生变化并返回。
str.chop
移除 str 中的最后一个字符。
str.chop!
与 chop 相同,但是 str 会发生变化并返回。

      单从这几句话,还是有些不明白(貌似借鉴于perl语言中的chop和chomp函数的用法),然后百度了一下,我在http://blog.chinaunix.net/uid-20691105-id-1568659.html得到如下内容:

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"

      我在本机逐个尝试上面的字符串,并且输出,得到如下所示:

      首先,可以看到print是不输出换行符的(不会自动换行),但是会解析双引号中的转义字符,可以看到print输出了字符串中的换行符\n和回车符\r。我之前有点迷惑的是“\r\n”,“\n\r”这两个前后顺序不同时,chop和chomp函数是如何处理的。从运行的结果看,当字符串最后面跟的是“\r\n”时,”\r\n”都会被去掉,而当字符串最后面跟的是”\n\r”时,只会去掉回车符。好吧,总算是明白了。

时间: 2024-12-08 16:38:54

Ruby中的chop和chomp用法辨析的相关文章

[No000010] Ruby 中一些百分号(%)的用法小结

#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#%Q #用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") puts %Q(1.Joe said: "Frank said: "#{what_frank_said}"") #“#”不能省 =

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

String字符串 字符串由String类提供,除了直接使用单双引号或其它字面量创建字符串,也可以使用String.new()方法来创建. a = "hello" b = String.new("world") Ruby中的字符串是可变对象. 字符串的连接 直接连接即可: >> "a""b" => "ab" >> "a" "b" =>

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可

谈谈Ruby中的类变量

Ruby中的类变量,很多文章都是不太建议使用的,主要原因在于他的一些特性容易导致犯一些错误,尤其在广泛使用元编程的时候. 初步接触类变量可能觉得他跟C++的类静态成员和Java中的静态变量没什么区别,但在实际使用中一不留神就会掉到类变量的陷阱中去 陷阱1,类变量跟类实例变量不同,类实例变量关联的是self,但类变量关联的是当前类作用域 class C end class D end class C @@var = "C" def D.getvar @@var end end class

(补充1)Ruby中的p、puts、print对比

p 和 puts 是 Ruby 中特别常用的方法,很多童鞋可能认为它们是差不多的,使用的时候也不加注意,但是仔细考究起来,它们是有明显差别的. 先举一个例子: class Foo def inspect "foo from inspect" end def to_s "foo from to_s" endendfoo = Foo.newp fooputs foop "p: <#{foo}>"puts "puts: <#

shell中$0,$?,$!等的特殊用法

shell中$0,$?,$!等的特殊用法 变量说明: $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表.如"$*"用「"」括起来的情况.以"$1 $2 … $n"的形式输出所有参数.[email protected]所有参数列表.如"[email protected]"用「"」括起来的情况

Oracle中HINT的30个用法

在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消

js中继承的几种用法总结(apply,call,prototype)

本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 <SPAN style="<SPAN style="FONT-SIZE: 18px"><html>   <body>  <script type="text/javascript"> 

在 Ruby 中执行 Shell 命令的 6 种方法

我们时常会与操作系统交互或在 Ruby 中执行 Shell 命令.Ruby为我们提供了完成该任务的诸多方法. Exec Kernel#exec 通过执行给定的命令来替换当前进程,例如: $ irb >> exec 'echo "hello $HOSTNAME"' hello codefun $ 注意 exec 利用 echo 命令替换了 irb 进程,然后退出.因为 Ruby 实际上结束了该方法,所以只能有限使用.该方法的缺点是,你无法从 Ruby 脚本中知道命令是执行成功