2015-11-06 160 views
0

有沒有人有一個很好的方法將列表中的所有項目隨機插入到另一個字符串中?例如,如果我有段文字,我想在句子後隨機插入網址。 Urls存儲在列表對象中。我會如何去做這件事?我想我可以計算句點數和其他標點符號的數量,但我也必須存儲每個時期的位置。如果任何人都可以指出我的方向正確,我將不勝感激。將字符串隨機插入另一個字符串

我覺得邏輯如下:

計數週期,在列表 存入期間指標, 加1到索引

回答

1

不會得到列表隨機指數,即指數後 插入文本這個工作給你?

var rnd = new Random(); 
var urls = new [] { "www.a.com", "www.b.com" }; 
var text = "I like apples. I like bananas."; 

var query = 
    from t in text.Split(new [] { '.' }, StringSplitOptions.RemoveEmptyEntries) 
    from x in new [] { t, ". ", urls[rnd.Next(urls.Length)] } 
    select x; 

var result = String.Join("", query); 

我喜歡蘋果。 www.b.com我喜歡香蕉。 www.a.com

0

在這裏,你去。

Module Module1 
    ' String to insert into 
    Const target As String = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse vel posuere neque, quis suscipit diam. Proin congue dapibus elit, ut tempus leo. Suspendisse suscipit mi quis purus laoreet facilisis. Sed eget arcu eu risus sodales posuere. Nulla ut nulla urna. Quisque eu eleifend metus. Mauris suscipit rhoncus eros at ultrices. Cras sodales facilisis mauris, vitae condimentum mi tempus a. Suspendisse hendrerit, arcu sit amet viverra placerat, eros quam venenatis enim, id tincidunt felis mauris id augue. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ac ullamcorper sem, sed porta orci. Praesent euismod, ipsum et sagittis gravida, purus ipsum venenatis ipsum, quis congue risus erat in magna. Donec nec elit ut velit faucibus efficitur. Donec facilisis, tellus et volutpat hendrerit, dui sem pulvinar lectus, sit amet fringilla sem mi eget elit." 
    ' Urls to insert 
    Private injections As String() = New String() {"http://lorempixel.com/output/cats-q-c-640-480-1.jpg", "http://lorempixel.com/output/cats-q-c-640-480-2.jpg", "http://lorempixel.com/output/cats-q-c-640-480-3.jpg", "http://lorempixel.com/output/cats-q-c-640-480-4.jpg"} 

    Sub Main() 
     Dim sentence As New System.Text.RegularExpressions.Regex("[^.!?]+[.!?]") 
     Dim result As New System.Text.StringBuilder() 
     Dim n As Integer = injections.Count() 
     ' Break sentence at punctuation. 
     For Each m As System.Text.RegularExpressions.Match In sentence.Matches(target) 
      ' Get index of one of our injection strings at random. 
      Dim i As Integer = CInt(Math.Ceiling(Rnd() * n)) - 1 
      result.Append(m).Append(injections(i)) 
     Next 
     Console.WriteLine(result.ToString()) 
     Console.ReadKey() 
    End Sub 

End Module