在围棋子提取(Extracting substrings in Go)

2019-07-31 10:22发布

我试图读取从控制台(包括空格),整条生产线,然后对其进行处理。 使用bufio.ReadString,换行符与输入一起读,所以我想出了下面的代码来修剪换行符:

input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string

有没有一种更地道的方式来做到这一点? 也就是说,有没有已经为您提取字符串时,是以结束空字节的护理库?

(是的,我已经知道有一种方法来读取,而不在换行符线走的readline - >字符串但我正在寻找更优雅的字符串操作。)

Answer 1:

它看起来像你被切片的工作和字符串存储格式,这是你在什么C.混淆不同

  • 在Go任何片存储长度(以字节为单位),所以你不必在意成本len操作:没有必要算
  • 去串NOT NULL终止,所以您不必删除一个空字节,而不必增加1通过添加一个空字符串切片后。

要删除最后一个字符(如果它是一个字节字符),根本就

inputFmt:=input[:len(input)-1]


Answer 2:

去字符串不是空终止,删除,你可以简单地做一个字符串的最后一个字符:

s = s[:len(s)-1]


Answer 3:

为了避免零长度输入恐慌,包裹在一个如果截断操作

input, _ := src.ReadString('\n')
var inputFmt string
if len(input) > 0 {
    inputFmt = input[:len(input)-1]
}
// Do something with inputFmt


Answer 4:

要获得子

  1. 找到“SP”的位置

  2. 切串阵列的逻辑

https://play.golang.org/p/0Redd_qiZM



Answer 5:

这是简单的一个围棋子演出

package main

import "fmt"

var p = fmt.Println

func main() {

  value := "address;bar"

  // Take substring from index 2 to length of string
  substring := value[2:len(value)]
  p(substring)

}


Answer 6:

警告:独对字符串操作将只与ASCII工作,当输入非ASCII UTF-8编码的字符,并可能甚至贪污腐败人物,因为它减少多字节字符中旬序列将错误计数。

这里是一个UTF-8识别版本:

func substr(input string, start int, length int) string {
    asRunes := []rune(input)

    if start >= len(asRunes) {
        return ""
    }

    if start+length > len(asRunes) {
        length = len(asRunes) - start
    }

    return string(asRunes[start : start+length])
}


文章来源: Extracting substrings in Go
标签: go substring