2016-06-20 7 views
0

私はgo初心者です、私は次のようなデータを持っていますTime Server Type Class Method-Message。 jsonフィールドの区切り文字 "|"の助けを借りて次のデータを持っていますTime|Server|Type|Class|Method-Message私が分割したい - |Method-Messageの4番目のインデックスに、フィールド区切り文字 "|"次のTime|Server|Type|Class|Method|Messageで終了します。n = s[6 : 6+strings.Index(s[6:], "/")]でデータを分割しようとしましたが、-Messageを削除して、Time|Server|Type|Class|Methodで終了しました。その後、フィールド区切り文字を追加してTime|Server|Type|Class|Method|Message|に追加しましたが、-Messageデータから削除されます。文字列分割と結合

答えて

6

元の文字列には/文字がないときにstrings.Index(s[6:], "/")を使用している理由は、私はわからないんだけど、あなたはいくつかの方法で-文字置き換えることができます。分割の元の試みで

をし、二回参加:

msg := "Time Server Type Class Method-Message" 
msg = strings.Join(strings.Split(msg, " "), "|") 
msg = strings.Join(strings.Split(msg, "-"), "|") 

またはわずかに、より効率的に、一度だけ参加して:

msg := "Time Server Type Class Method-Message" 
parts := strings.Split(msg, " ") 
parts = append(parts[:4], strings.Split(parts[4], "-")...) 
newMsg := strings.Join(parts, "|") 

それともstrings.Replaceへの複数の呼び出しで:

newMsg := strings.Replace(strings.Replace(msg, " ", "|", -1), "-", "|", -1) 

または単一の正規表現を持つ: `strings.Index(Sこのライン上で私を修正するための

newMsg := regexp.MustCompile(`[ -]`).ReplaceAllString(msg, "|") 
+0

JimBのおかげで[6:]、「/ "、"お礼 – PlayDave

+0

'strings.Index(s [6:]、" - "'私はこのメソッドを使用しました 'part = append(parts [:4]、strings.Split(parts [4]、 " - ")... ) 'それは私が欲しかったすべてをした、Strings.Replaceを使用することを避けていたので、文字列で文字列を置き換えるため、フィールドは区切り文字で区切られています。文字列ではないスキーマ内に存在します。ありがとうJimB – PlayDave