2016-08-22 66 views
0

我有一段文字。如何在Golang中用div來包裝每一行?

我想用div來包裝每一行。

例如,如果文本字符串看起來像這樣

Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 

Nam eget lectus porta metus aliquam tincidunt sed vel enim. 

然後我想換就這樣

<div>Lorem ipsum dolor sit amet,</div> 
<div>consectetur adipiscing elit.</div> 
<div><br/></div> 
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div> 

有人能告訴我什麼是正確的方法是什麼?

感謝

+2

文本存儲在變量或文件中嗎?你有什麼嘗試? –

+0

@DavidCullen它存儲在一個變量中。答案有幫助。謝謝 – user1091558

回答

2

您可以使用bytes.Bufferbufio.NewScanner,像這樣的工作示例代碼:

package main 

import "fmt" 
import "strings" 
import "bufio" 
import "bytes" 

func main() { 
    r := strings.NewReader(`Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. 

Nam eget lectus porta metus aliquam tincidunt sed vel enim.`) 

    buf := &bytes.Buffer{} 
    scanner := bufio.NewScanner(r) 
    for scanner.Scan() { 
     s := scanner.Text() 
     if len(s) == 0 { 
      s = `<br/>` 
     } 
     buf.WriteString(`<div>` + s + `</div> 
`) 
    } 
    fmt.Println(buf.String()) 
} 

輸出:

<div>Lorem ipsum dolor sit amet,</div> 
<div>consectetur adipiscing elit.</div> 
<div><br/></div> 
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div> 

您可以使用bytes.Bufferhtml/template
但你必須<div></div>代替<div><br/></div>,那麼你可以使用

s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1) 

這樣的工作示例代碼:

package main 

import "fmt" 
import "bytes" 
import "html/template" 
import "strings" 

func main() { 
    r := []string{`Lorem ipsum dolor sit amet,`, 
     `consectetur adipiscing elit.`, 
     ``, 
     `Nam eget lectus porta metus aliquam tincidunt sed vel enim.`} 
    buf := &bytes.Buffer{} 
    t := template.Must(template.New("template").Parse("{{range .}}<div>{{.}}</div>\n{{end}}")) 
    t.Execute(buf, r) 
    s := buf.String() 
    s = strings.Replace(s, `<div></div>`, `<div><br/></div>`, -1) 
    fmt.Println(s) 
} 

輸出:

<div>Lorem ipsum dolor sit amet,</div> 
<div>consectetur adipiscing elit.</div> 
<div><br/></div> 
<div>Nam eget lectus porta metus aliquam tincidunt sed vel enim.</div> 
1

爲了生成HTML片段的一部分從一行中,你應該使用下面的代碼,該代碼負責正確地轉義HTML。

package main 

import (
    "html/template" 
    "os" 
) 

func main() { 
    data := []string{ 
     "first", 
     "second", 
     "<style>body{background-color:lime;}</style>", 
     "<script>alert('evil')</script>", 
    } 
    htmlTemplate := "{{range .}}<div>{{.}}</div>\n{{end}}" 

    tmpl := template.Must(template.New("").Parse(htmlTemplate)) 
    tmpl.Execute(os.Stdout, data) 
}