替换除给定索引处的字符外的所有字符

时间:2015-10-11 06:42:08

标签: ruby

我已经知道如何替换给定索引处的字符,但我希望将所有字符替换为给定索引处的字符。

例如,我有字符串@interface ImagesTableViewController : UITableViewController @property(nonatomic,strong) NSArray* images; @end @implementation ImagesTableViewController - (void)viewDidLoad { self.images = [dbManager getImages]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.images.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"]; } cell.imageView.image = self.images[indexpath.row]; return cell; } @end ,并希望用"011010010"替换每个字符,但第一次出现"0"除外。我使用"1"查找第一个String#index("1")的索引,但是从那里开始,如何将字符串更改为"1"

6 个答案:

答案 0 :(得分:2)

你可以用零替换所有的那些,然后改变你想要保留的角色:

test = "011010010"
testIndex = test.index("1")
test.gsub!("1", "0")
test[testIndex] =  "1"

答案 1 :(得分:2)

str = "011010010"
str[/0*1/].ljust(str.size,'0')
  #=> "010000000"

答案 2 :(得分:1)

一种方法是创建一个包含所有0值的新字符串,其长度与原始字符串的长度相同,然后将第一个索引替换为1

str = "011010010"
first_one = str.index("1")

str = "0" * str.length
str[first_one] = "1"

puts str
#=> 010000000

答案 3 :(得分:1)

flag = false
"011010010".gsub(/./){|s| (flag ? "0" : s).tap{flag = true if s == "1"}}

答案 4 :(得分:1)

test = "011010010"
test.sub(/(0*1)(.*)/) { $1 << '0'*$2.length }
#⇒ "010000000"

test =~ /1/ && $` << '1' << '0'*$'.length || test # C'`mon parser
#⇒ "010000000"

答案 5 :(得分:0)

也许是这样的,在第一场比赛后只改变角色:

str = "010010110"
first_occurence = str.index('1')
results = "#{str[0..first_occurence]}#{str[first_occurence..-1].gsub('1','0')}"

我认为这有一些聪明的正则表达式,但不确定会是什么。