# define
french_string = "il \xc3\xa9tait une fois"
long_string = <<EOF
Here is a long string
With many paragraphs
EOF puts long_string.empty?
puts long_string.include? "many" puts french_string + long_string # concatenate
hash = { key1: "val1", key2: "val2" }
string = ""
str2 = ""
hash.each{|k,v| string << k.to_s << " is " << v << "\n" }
hash.each{|k,v| str2 << "#{k}" << " is " << "#{v}" << "\n"}
puts string
puts str2 # join
data = ['', '', '']
s = ''
data.each { |x| s << x << ' and a '}
puts s # => "1 and a 2 and a 3 and a "
puts data.join(' and a ') # number
number = 5
puts "The number is #{number}." # => "The number is 5."
puts "The number is #{5}." # => "The number is 5."
puts "The number after #{number} is #{number.next}."
# => "The number after 5 is 6."
puts "The number prior to #{number} is #{number-1}."
# => "The number prior to 5 is 4."
puts "We're ##{number}!" # => "We're #5!"
puts "I've set x to #{x = 5; x += 1}."

# Escaping
puts "\#{foo}"
puts '#{foo}'
# puts "#{foo}" # error because no variable of foo defined.
template = 'Oceania has always been at war with %s.'
puts template % 'Eurasia' # => "Oceania has always been at war with Eurasia." puts 'To 2 decimal places: %.4f' % Math::PI
puts 'Zero-padded: %.3d' % Math::PI

JSP, ASP type

require 'erb'
template = ERB.new %q{Chunky <%= food %>!}
food = "bacon"
puts template.result(binding) # => "Chunky bacon!"
food = "peanut butter"
puts template.result(binding) # => "Chunky peanut butter!"
puts template.result

reverse, reverse!, split

reverse 和 reverse! 的区别:reverse 不改变 string 本身, reverse! 相当于 s=s.reverse

s = ".sdrawkcab si gnirts sihT"
puts s.reverse
puts s
puts s.reverse!
puts s.split(/(\s+)/) # ["This", " ", "string", " ", "is", " ", "backwards."]
puts s.split(/\s+/) # => ["This", "sting", "is", "backwards."]
puts s.split(' ') # => ["This", "sting", "is", "backwards."]

八进制 和 十六进制 的定义

octal = "\000\001\010\020"
octal.each_byte { |x| puts x }
#
#
#
#
hexadecimal = "\x00\x01\x10\x20"
hexadecimal.each_byte { |x| puts x }
#
#
#
#

This makes it possible to represent UTF-8 characters even when you can’t type them or display them in your terminal.

Try running this program, and then opening the generated file smiley.html in your web browser:

open('smiley.html', 'wb') do |f|
f << '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">'
f << "\xe2\x98\xBA"
end

特殊字符:

"\a" == "\x07" # => true # ASCII 0x07 = BEL (Sound system bell)
"\b" == "\x08" # => true # ASCII 0x08 = BS (Backspace)
"\e" == "\x1b" # => true # ASCII 0x1B = ESC (Escape)
"\f" == "\x0c" # => true # ASCII 0x0C = FF (Form feed)
"\n" == "\x0a" # => true # ASCII 0x0A = LF (Newline/line feed)
"\r" == "\x0d" # => true # ASCII 0x0D = CR (Carriage return)
"\t" == "\x09" # => true # ASCII 0x09 = HT (Tab/horizontal tab)
"\v" == "\x0b" # => true # ASCII 0x0B = VT (Vertical tab)

ruby里,如果是可读的ASCII字符,即使是以十六进制表示,print出来的还是可读字符。不可读,输出的为十六进制(以\x开头)字符表示形式。

"\x10\x11\xfe\xff" # => "\u0010\u0011\xFE\xFF"
"\x48\145\x6c\x6c\157\x0a" # => "Hello\n"

为了避免混淆,统一的,单反斜线由双反斜线表示:\  => \\

"\\".size # => 1
"\\" == "\x5c" # => true
"\\n"[0] == ?\\ # => true
"\\n"[1] == ?n # => true
"\\n" =~ /\n/ # => nil

组合键的表示. =~ 是正则匹配符号。

"\C-a\C-b\C-c" # => "\u0001\u0002\u0003"
"\M-a\M-b\M-c" # => "\xE1\xE2\xE3" ?\C-a # => "\u0001"
?\M-z # => "\xFA" contains_control_chars = /[\C-a-\C-^]/
'Foobar' =~ contains_control_chars # => nil
"Foo\C-zbar" =~ contains_control_chars # => 3
def snoop_on_keylog(input)
input.each_char do |b|
case b
when ?\C-c; puts 'Control-C: stopped a process?'
when ?\C-z; puts 'Control-Z: suspended a process?'
when ?\n; puts 'Newline.'
when ?\M-x; puts 'Meta-x: using Emacs?'
end
end
end snoop_on_keylog("ls -ltR\003emacsHello\012\370rot13-other-window\012\032")
# Control-C: stopped a process?
# Newline.
# Meta-x: using Emacs?
# Newline.
# Control-Z: suspended a process?

字符串定义

puts "foo\tbar"
# foo bar
puts %{foo\tbar}
# foo bar
puts %Q{foo\tbar}
# foo bar
puts 'foo\tbar'
# foo\tbar
puts %q{foo\tbar}
# foo\tbar

统计单词个数。

class String
def word_count
frequencies = Hash.new(0)
self.downcase.scan(/(\w+([-'.]\w+)*)/) { |word, ignore| frequencies[word] += 1 }
return frequencies
end
end
puts %{"The F.B.I. fella--he's quite the man-about-town."}.word_count
# => {"f.b.i"=>1, "fella"=>1, "he's"=>1,
# "quite"=>1, "the"=>2, "man-about-town"=>1}

end with 2.9 cookbook

to be continued...

ruby 学习 -- string --1的更多相关文章

  1. Ruby学习笔记4: 动态web app的建立

    Ruby学习笔记4: 动态web app的建立 We will first build the Categories page. This page contains topics like Art, ...

  2. ruby 学习笔记 1

    写ruby blog  系统的记录下.也是对我学ruby的点滴记录. 先介绍下我的学习环境.系统:ubuntu12.04文档:techotopia ,ruby文档,the hard way learn ...

  3. Ruby学习心得之 Linux下搭建Ruby环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...

  4. Ruby学习之mixin

    直接上代码: module Action def jump @distance = rand(4) + 2 puts "I jumped forward #{@distance} feet! ...

  5. ruby学习网站

    Ruby官方中文网(推荐): https://www.ruby-lang.org/zh_cn/ 国内非常不错的Ruby学习教程网站(推荐): http://www.yiibai.com/ruby Ru ...

  6. JDK源码学习--String篇(二) 关于String采用final修饰的思考

    JDK源码学习String篇中,有一处错误,String类用final[不能被改变的]修饰,而我却写成静态的,感谢CTO-淼淼的指正. 风一样的码农提出的String为何采用final的设计,阅读JD ...

  7. 学习string,stringBuffer时遇到的问题

    今天学习string和stringBuffer.了解了两者的区别,然后去看java api都有啥方法.stringBuffer类有indexOf方法,于是写了下面的代码 String str = &q ...

  8. ruby学习笔记(1)-puts,p,print的区别

    ruby学习笔记-puts,p,print的区别 共同点:都是用来屏幕输出的. 不同点:puts 输出内容后,会自动换行(如果内容参数为空,则仅输出一个换行符号):另外如果内容参数中有转义符,输出时将 ...

  9. Java学习——String,StringBuffer和StringBuilder

    Java学习——String,StringBuffer和StringBuilder 摘要:本文主要介绍了String字符串在内存中的存储情况,以及StringBuffer和StringBuilder的 ...

随机推荐

  1. 1 通过JNI混合使用Java和C++ -----> 操作字符串

    JNI(Java Native Interface)是Java语言的一部分,可以访问非Java语言编写的程序,也可以用于在C++程序中执行Java代码. 步骤: 1>  编写带有native声明 ...

  2. Entity Framework学习笔记(一)

    请注明转载地址:http://www.cnblogs.com/arhat 哈哈!老魏回来了,4月份的内容开始更新了,由于3月份时间都在做项目,没有时间写了,那么4月份老魏会尽可能的多写点东西的.那么4 ...

  3. linux下sort详解(sort对科学记数法的排序)

    1.参数解释 -t 设置分隔符 -k 设置比较域(列) -n 按数字比较 -g 科学记数法方式比较 -o 设置输出文件,与“>”相比可以设置输出到原文件,“>”会清空原文件 -r 降序(大 ...

  4. 命令学习:iftop

    iftop显示带宽使用情况 http://riobard.com/2010/04/30/l2tp-over-ipsec-ubuntu/ http://jaseywang.me/2011/12/19/i ...

  5. 百度翻译API

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  6. android开发 解决启动页空白或黑屏问题

    遇到的情况: app启动时进入启动页时出现白屏页,然后大概一秒之后就出现了背景图片. 原因:app启动时加载的是windows背景,之后再加载布局文件的,所以开始的黑屏/白屏就是windows的背景颜 ...

  7. Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)

    http://blogs.msdn.com/b/ramaprasanna/archive/2009/09/16/invalid-object-name-sys-configurations-micro ...

  8. 【BZOJ】【2245】【SDOI2011】工作安排

    网络流/费用流 裸题吧……直接建模就好了……所谓的“分段函数”就是吓唬你的,其实就是对于每个人分开建几条流量不同.费用不同的弧而已. 对每种产品,连S->i ,(c[i],0):对每个工作人员 ...

  9. Matlab设置网格线密度(坐标精度)

    1.不精确 set(gca,'XMinorTick','on') 这样的话知识x轴显示了细的密度,网格线并没有变. 2.精确 set(gca,'xtick',-1:0.1:1); set(gca,'y ...

  10. Segment Tree with Lazy 分类: ACM TYPE 2014-08-29 11:28 134人阅读 评论(0) 收藏

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; stru ...