2015-01-13 2 views
2

Это простой вопрос, но я до сих пор не могу понять, как это сделать.Преобразование нормального пространства/пробела в неразрывное пространство в Голанге?

Скажем, у меня есть эта строка:

x := "this string" 

пробельных между «этим» и «строки» по умолчанию в регулярные Юникода символ пробела 32/U+0020. Как бы преобразовать его в неразрушающий символ unicode пробельный символ U+00A0 в Go?

+0

Sudden downvotes? Я не согласен; Я думаю, что это полезный вопрос, тем более, что я потратил пару часов на Google, пытаясь понять это без успеха. – GreenRaccoon23

ответ

-1

Я думаю, что основной способ сделать это путем создания простой функции:

http://play.golang.org/p/YT8Cf917il

package main 

import "fmt" 

func ReplaceSpace(s string) string { 
    var result []rune 
    const badSpace = '\u0020' 
    for _, r := range s { 
     if r == badSpace { 
      result = append(result, '\u00A0') 
      continue 
     } 
     result = append(result, r) 
    } 
    return string(result) 
} 

func main() { 
    fmt.Println(ReplaceSpace("this string")) 
} 

Если вам нужны более сложные манипуляции, вы могли бы создать что-то с

"golang.org/x/text/transform" 
"golang.org/x/text/unicode/norm" 

прочитанную http://blog.golang.org/normalization для получения дополнительной информации об использовании

+0

Это ТОЧНО, что мне нужно. Огромное спасибо!!! – GreenRaccoon23

+5

Проще говоря: [strings.Replace («эта строка», «", "\ u00a0", -1)] (http://play.golang.org/p/wM4auw_R_5). –

+0

Не знал о специальной строке ([] rune) encoding/conversion! Это аккуратно. – twotwotwo

2

Используйте документацию, чтобы идентифицировать стандартный пакет strings как вероятный кандидат, а затем выполните поиск (или прочитайте все это, вы должны знать, что доступно в стандартной библиотеке/пакетах любого используемого вами языка), чтобы найти strings.Map.

Тогда очевидно короткое простое решение для преобразования любое белое пространство было бы:

package main 

import (
    "fmt" 
    "strings" 
    "unicode" 
) 

func main() { 
    const nbsp = '\u00A0' 
    result := strings.Map(func(r rune) rune { 
     if unicode.IsSpace(r) { 
      return nbsp 
     } 
     return r 
    }, "this string") 

    fmt.Printf("%s → %[1]q\n", result) 
} 

Playground

Как упоминалось ранее, если вы действительно хотите только заменить " " то, возможно strings.Replace.