153

コンソールから行全体(空白を含む)を読み取って処理しようとしています。bufio.ReadStringを使用すると、改行文字が入力と一緒に読み取られるため、改行文字をトリミングするための次のコードを思いつきました。

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

これを行うためのより慣用的な方法はありますか?つまり、サブストリングを抽出するときに終了ヌルバイトを処理するライブラリはすでにありますか?

(はい、 go readline-> stringに改行文字なしで行を読み取る方法がすでにあることは知っていますが、エレガントな文字列操作をもっと探しています。)

4

8 に答える 8

195

スライスの働きと、C とは異なる文字列の格納形式に混乱しているようです。

  • Go の任意のスライスは長さ (バイト単位) を格納するため、操作のコストを気にするlen必要はありません。カウントする必要はありません。
  • Go 文字列は null で終了しないため、null バイトを削除する必要はなく1、空の文字列を追加してスライスした後に追加する必要もありません。

最後の文字 (1 バイト文字の場合) を削除するには、次のようにします。

inputFmt:=input[:len(input)-1]
于 2012-09-07T07:39:37.790 に答える
29

Go 文字列は null で終了しません。文字列の最後の文字を削除するには、次のようにします。

s = s[:len(s)-1]
于 2012-09-07T15:10:53.790 に答える
3

部分文字列を取得するには

  1. 「sp」の位置を見つける

  2. 配列論理で文字列を切り取る

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

于 2015-11-03T08:51:43.867 に答える